我想使用我放入整洁文本格式的训练数据框架运行回归。原始数据文件包括有明显发育障碍的参与者和可能有或可能没有发育障碍的参与者。我从一个更大、更整洁的文本数据框中创建了一个数据框,它可以提取文本文件中的关键字,并记录该词在文本文档中出现的次数。那些有明显残疾的人在他们的名字前面有"D“。它看起来是这样的:
Name of Text File Word n
DAdam autism 3
DAdam adhd 2
DJane autism 1
Mark adhd 4
Joey add 3
然后,我添加了二进制变量来表示单词是否出现,其中1表示是,0表示否
df$autism <- 1
df$autism <- if_else(one_dev$word == "autism", 1, 0)
因此,现在的数据框如下所示:
Name of Text File Word n autism adhd add
DAdam autism 3 1 0 0
DAdam adhd 2 0 1 0
DJane autism 1 1 0 0
Mark adhd 4 0 1 0
Joey add 3 0 0 1
我希望它看起来像这样:
Name of Text File autism adhd add
DAdam 1 1 0
DJane 1 0 0
Mark 0 1 0
Joey 0 0 1
然后,我希望能够运行回归分析,尝试并预测某个特定参与者是否可能患有发育障碍。
谢谢!
发布于 2018-08-15 06:56:22
如果您具有整洁格式的文本,并且希望它采用适合建模的格式,则通常需要对其执行cast()
操作。我经常使用cast_sparse()
,特别是当我想做glmnet modeling的时候。
你可以这样开始:
library(tidyverse)
library(tidytext)
df <- tribble(~name, ~disability, ~word, ~count,
"Adam", TRUE, "autism", 3,
"Adam", TRUE, "adhd", 2,
"Jane", TRUE, "autism", 1,
"Mark", FALSE, "adhd", 4,
"Joey", FALSE, "add", 3)
sparse_words <- df %>%
cast_sparse(name, word, count)
sparse_words
#> 4 x 3 sparse Matrix of class "dgCMatrix"
#> autism adhd add
#> Adam 3 2 .
#> Jane 1 . .
#> Mark . 4 .
#> Joey . . 3
然后,您可以继续在任何一种喜欢矩阵输入的机器学习模型中使用这个稀疏矩阵(这是大多数模型!)。在这里,让我们来看看如何创建一个简单的数据框架并拟合一个玩具回归。
df_model <- sparse_words %>%
as.matrix() %>%
tbl_df() %>%
bind_cols(df %>%
distinct(name, disability) %>%
select(disability))
df_model
#> # A tibble: 4 x 4
#> autism adhd add disability
#> <dbl> <dbl> <dbl> <lgl>
#> 1 3 2 0 TRUE
#> 2 1 0 0 TRUE
#> 3 0 4 0 FALSE
#> 4 0 0 3 FALSE
lm(disability ~ ., data = df_model)
#>
#> Call:
#> lm(formula = disability ~ ., data = df_model)
#>
#> Coefficients:
#> (Intercept) autism adhd add
#> 0.8000 0.2000 -0.2000 -0.2667
由reprex package创建于2018-08-14 (v0.2.0)。
发布于 2018-08-08 22:48:53
tidyr和dplyr的组合可以帮助您实现这一目标。从您的tidytext data.frame开始,您可以继续传播数据,并修改第一列之后的所有内容。
df1 %>%
spread(Word, n) %>%
mutate_at(-1, function(x) ifelse(is.na(x), 0, 1))
Name_of_Text_File add adhd autism
1 DAdam 0 1 1
2 DJane 0 0 1
3 Joey 1 0 0
4 Mark 0 1 0
数据:
df1 <- structure(list(Name_of_Text_File = c("DAdam", "DAdam", "DJane",
"Mark", "Joey"), Word = c("autism", "adhd", "autism", "adhd",
"add"), n = c(3L, 2L, 1L, 4L, 3L)), class = "data.frame", row.names = c(NA,
-5L))
发布于 2018-08-08 22:59:12
类似于另一个答案:
library(dplyr)
library(tidyr)
df1 %>%
mutate(n = 1) %>%
spread(Word, n, fill = 0)
# Name_of_Text_File add adhd autism
# 1 DAdam 0 1 1
# 2 DJane 0 0 1
# 3 Joey 1 0 0
# 4 Mark 0 1 0
https://stackoverflow.com/questions/51749425
复制相似问题