2015-01-24 4 views
0

Я ищу короткий и эффективный метод для запуска индивидуального анализа ANOVA на каждом уровне фактора. То, что у меня сейчас, я думаю, избыточно и затрудняет рабочее пространство. Скажем, у меня есть следующие:Выполните ANOVA для каждого отдельного уровня фактора в R

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) 

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

ответ

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 
+2

можно ли выполнить резюме (А) для каждого из элементов ? –

+1

Да, это: просто сохраните, например, первую альтернативу как 'l', а затем' lapply (l, summary) ' – DatamineR