【发布时间】:2019-10-26 22:27:03
【问题描述】:
我正在尝试遍历一个大型数据框 [5413 列] 并在每一列上运行 ANOVA,但是在尝试这样做时出现错误。
我想将方差分析中的 P 值写入包含列标题的数据框中的新行。但是限制了我目前的知识,我将 P 值输出写入可以在 bash 中解析的文件。
以下是数据布局示例:
data()
Name, Group, aaaA, aaaE, bbbR, cccD
Apple, Fruit, 1.23, 0.45, 0.3, 1.1
Banana, Fruit, 0.54, 0.12, 2.0, 1.32
Carrot, Vegetable, 0.01, 0.05, 0.45, 0.9
Pear, Fruit, 0.1, 0.2, 0.1, 0.3
Fox, Animal, 1.0, 0.9, 1.2, 0.8
Dog, Animal, 1.2, 1.1, 0.8, 0.7
这是 dput 的输出:
structure(list(Name = structure(c(1L, 2L, 3L, 6L, 5L, 4L), .Label = c("Apple",
"Banana", "Carrot", "Dog", "Fox", "Pear"), class = "factor"),
Group = structure(c(2L, 2L, 3L, 2L, 1L, 1L), .Label = c(" Animal",
" Fruit", " Vegetable"), class = "factor"), aaaA = c(1.23,
0.54, 0.01, 0.1, 1, 1.2), aaaE = c(0.45, 0.12, 0.05, 0.2,
0.9, 1.1), bbbR = c(0.3, 2, 0.45, 0.1, 1.2, 0.8), cccD = c(1.1,
1.32, 0.9, 0.3, 0.8, 0.7)), class = "data.frame", row.names = c(NA,
-6L))
要从我做的一个成功的输出:
summary(aov(aaaA ~ Group, data=data))[[1]][["Pr(>F)"]]
然后我尝试在循环中实现它:
for(i in names(data[3:6])){
out <- summary(aov(i ~ Group, data=data))[[1]][["Pr(>F)"]]
write.csv(out, i)}
返回错误:
Error in model.frame.default(formula = i ~ Group, data = test, drop.unused.levels = TRUE) :
variable lengths differ (found for 'Group')
任何人都可以帮助解决错误或实施每列方差分析吗?
【问题讨论】:
-
请与
dput(my_data)分享您的数据。 -
@NelsonGon 我已经用示例数据集编辑了帖子,谢谢!
-
cccDintentionally NAs 吗? -
抱歉,其中一行结尾有逗号。现已修复。
-
这对你有用吗?有点乱:
lapply(to_use,function(x) do.call(aov,list(as.formula(paste("aaaA","~",x)), data=df)))。to_use<-setdiff(names(df),"aaaA")很乱,因为它返回一些乱七八糟的源代码。