对R中因子的每个单独级别执行ANOVA

时间:2015-01-24 04:03:21

标签: r split anova

我正在寻找一种简短有效的方法来对每个因子水平进行单独的ANOVA分析。我认为,我现在所拥有的是多余的,并且使工作空间变得混乱。假设我有以下内容:

Letter Number Question
A      1      1
A      2      1
A      3      1
B      1      1
B      2      1
B      3      1
C      1      1
C      2      1
C      3      1

我可以运行以下代码将数据帧拆分为子集A,B和C:

> list2env(split(data, data$Letter), globalenv())
> ANOVA.A <- aov(Question~Number, data=A)
> ANOVA.B <- aov(Question~Number, data=B)
> ANOVA.C <- aov(Question~Number, data=C)

虽然这为我提供了所需的结果,但却使工作区变得杂乱无章。我的实际数据集要大得多,所以我在寻找更简单,更优雅的东西。

1 个答案:

答案 0 :(得分:3)

使用基础lapply

lapply(split(df, df$Letter), aov, formula=Question ~ Number)

或者使用dplyr

library(dplyr)
obj <- df %>% group_by(Letter) %>% do(model = aov(Question~Number, data = .))
obj$model

使用data.table

library(data.table)
df <- as.data.table(df)
df[, list(Model = list(aov(Question ~ Number))), keyby = Letter]$Model