我需要在基于另一列的数据框中的每一列上运行单向ANOVA。我的数据框有57列,因此输入每个列名称非常耗时。这是我数据框的一部分。
基本上,我需要为每一列运行此函数
aov(df$PGY_16 ~ df$Total_Time_cm_16, df)
所以我需要一个循环来为我的数据框中的每一列运行它。
非常感谢任何帮助!
答案 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)
})