(Как) я могу использовать ddply для суммирования данных, сгруппированных по двум факторам? - PullRequest
0 голосов
/ 05 сентября 2018

Краткая версия вопроса: Как я могу использовать ddply для суммирования моего кадра данных, сгруппированного по нескольким переменным?

В настоящее время я использую этот код для суммирования по условию:

ddply(ExampleData, .(Condition), summarize,  Average=mean(Var1, na.rm=TRUE), SD=sd(Var1),N=length(Var1), Med =median(Var1))

Как настроить код для суммирования по двум переменным (условие и блок)?

Желаемый формат вывода что-то вроде:

  Condition Block Average SD  N Med
1         A     1    0.50 .. ..  ..
2         A     2    0.80 .. ..  ..
3         B     1    0.90 .. ..  ..
4         B     2    0.75 .. ..  ..

====

Более длинная версия вопроса с примерами данных.

Dataframe:

ExampleData <- structure(list(Condition = c("A", "A", "A", "B", "B", "B"), Block = c(1, 
2, 1, 2, 1, 2), Var1= c(0.6, 0.8, 0.4, 1, 0.9, 0.5)), row.names = c(NA, 
6L), class = "data.frame")

, что:

  Condition Block Average SD N Med
1         A     1  0.6 
2         A     2  0.8
3         A     1  0.4
4         B     2  1.0
5         B     1  0.9
6         B     2  0.5

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

ddply(ExampleData, .c(Condition,Block), summarize,  Average=mean(Var1, na.rm=TRUE), SD=sd(Var1),N=length(Var1), Med =median(Var1))

(или. (Условие * Блок) или список (Условие, Блок) или ... ??)

1 Ответ

0 голосов
/ 05 сентября 2018

Просто удалите c в аргументе .variables, поэтому ваш код:

library(plyr)
ddply(ExampleData, .(Condition, Block), summarize,  Average=mean(Var1, na.rm=TRUE), SD=sd(Var1),N=length(Var1), Med =median(Var1))

Кстати, вы можете переключиться на использование dplyr вместо plyr. https://blog.rstudio.com/2014/01/17/introducing-dplyr/

Если бы вы сделали это в dplyr:

summarize(group_by(ExampleData, Condition, Block), Average=mean(Var1, na.rm=TRUE), SD=sd(Var1),N=length(Var1), Med =median(Var1))

Вы также можете использовать трубопровод, чтобы это могло быть:

ExampleData %>% 
  group_by(Condition, Block) %>% 
  summarise(Average=mean(Var1, na.rm=TRUE), 
            SD=sd(Var1),
            N=length(Var1), 
            Med =median(Var1))
...