每列的单向ANOVA

时间:2017-06-29 22:44:45

标签: r loops anova

我需要在基于另一列的数据框中的每一列上运行单向ANOVA。我的数据框有57列,因此输入每个列名称非常耗时。这是我数据框的一部分。

基本上,我需要为每一列运行此函数

aov(df$PGY_16 ~ df$Total_Time_cm_16, df)

所以我需要一个循环来为我的数据框中的每一列运行它。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

为了重现性,下面的代码使用内置的mtcars数据框并返回一个列表,其中每个列表元素都是aov mtcars$cyl模型,其中每个列都包含map数据框。我们使用purrr包中的tidyverse(它是aov包套件的一部分)来处理在数据框的每一列上连续运行library(tidyverse) aov.models = mtcars[ , -grep("cyl", names(mtcars))] %>% map(~ aov(mtcars$cyl ~ .x)) 。< / p>

aov.models = df[ , -grep("PGY_16", names(df))] %>%
  map(~ aov(df$PGY_16 ~ .x))

对于您的数据,类似的代码是:

cwd

答案 1 :(得分:0)

无需安装tidyverse软件包即可完成。 这是mtcars数据帧的示例。

aov.models <- lapply(setdiff(names(mtcars), "cyl"), function(s) {
  aov(as.formula(paste(s, " ~ cyl")),mtcars)
})