对 R 中一个因子的每个单独水平执行方差分析
Perform an ANOVA for each individual level of a factor in R
我正在寻找一种简短而有效的方法来 运行 在每个因素水平上进行单独的方差分析。我认为我目前拥有的东西是多余的,并且使工作混乱 space。假设我有以下内容:
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)
虽然这为我提供了所需的结果,但它使工作变得混乱space。我的实际数据集要大得多,所以我正在寻找更简单、更优雅的东西。
使用基数 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
我正在寻找一种简短而有效的方法来 运行 在每个因素水平上进行单独的方差分析。我认为我目前拥有的东西是多余的,并且使工作混乱 space。假设我有以下内容:
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)
虽然这为我提供了所需的结果,但它使工作变得混乱space。我的实际数据集要大得多,所以我正在寻找更简单、更优雅的东西。
使用基数 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