(如何)我可以使用ddply来汇总按两个因子分组的数据帧?

问题描述 投票:0回答:1

问题的简短版本:如何使用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 .. ..  ..

====

使用示例数据的问题的更长版本。

数据帧:

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))

(或。(条件*块)或列表(条件,块)或...... ??)

r aggregate plyr summarize
1个回答
1
投票

只需删除.variables参数中的c,所以您的代码是:

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

顺便说一句,你可能想切换到使用dplyr而不是plyrhttps://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))
© www.soinside.com 2019 - 2024. All rights reserved.