【发布时间】:2017-12-03 19:13:15
【问题描述】:
我需要基于另一列对数据框中的每一列运行单向方差分析。我的数据框有 57 列,因此输入每个列名非常耗时。这是我的数据框的一部分。
所以基本上,我需要为每一列运行这个函数
aov(df$PGY_16 ~ df$Total_Time_cm_16, df)
所以我需要一个循环来为我的数据框中的每一列运行它。
任何帮助将不胜感激!
【问题讨论】:
-
一个简单的
lapply应该可以。
我需要基于另一列对数据框中的每一列运行单向方差分析。我的数据框有 57 列,因此输入每个列名非常耗时。这是我的数据框的一部分。
所以基本上,我需要为每一列运行这个函数
aov(df$PGY_16 ~ df$Total_Time_cm_16, df)
所以我需要一个循环来为我的数据框中的每一列运行它。
任何帮助将不胜感激!
【问题讨论】:
lapply 应该可以。
为了重现性,下面的代码使用内置的mtcars 数据框并返回一个列表,其中每个列表元素都是mtcars$cyl 的aov 模型,以及数据框中的所有其他列。我们使用来自purrr 包(它是tidyverse 包套件的一部分)中的map 来处理在数据框的每一列上连续运行aov。
library(tidyverse)
aov.models = mtcars[ , -grep("cyl", names(mtcars))] %>%
map(~ aov(mtcars$cyl ~ .x))
对于您的数据,类似的代码是:
aov.models = df[ , -grep("PGY_16", names(df))] %>%
map(~ aov(df$PGY_16 ~ .x))
【讨论】:
无需安装tidyverse 包即可。
这是mtcars 数据框的示例。
aov.models <- lapply(setdiff(names(mtcars), "cyl"), function(s) {
aov(as.formula(paste(s, " ~ cyl")),mtcars)
})
【讨论】: