Выполните ANOVA для каждого отдельного уровня фактора в R

Я ищу короткий и эффективный метод для проведения индивидуального анализа 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)

Хотя это дает мне требуемые результаты, это загромождает рабочее пространство. Мой фактический набор данных намного больше, поэтому я ищу что-то более простое и элегантное.


person Provisional.Modulation    schedule 24.01.2015    source источник


Ответы (1)


Используя базу 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
person DatamineR    schedule 24.01.2015
comment
можно ли сделать сводку(aov) по каждому из пунктов? - person Provisional.Modulation; 24.01.2015
comment
Да, это так: просто сохраните, например, первый вариант как l, а затем lapply(l, summary) - person DatamineR; 25.01.2015