按多个标准获取聚合(平均值,中位数,最大值,...)

时间:2015-08-19 22:23:21

标签: r aggregation plyr

我有一个这种形式的数据框

    salary crit1  crit2  crit3
1   41000  TRUE   TRUE   ...
2   50000  TRUE   FALSE  ...
3   39500  FALSE  FALSE
4   40500  TRUE   FALSE
5   75000  FALSE  FALSE

现在我想使用一些R脚本按照标准crit1,crit2,crit3计算聚合...所以我希望聚合包括每个标准为TRUE的那些行,例如所有行的平均值/中值/最大值为crit1为TRUE,所有行的平均值/中值/最大值为crit2为TRUE等等。我 NOT 对标准的组合感兴趣。

有点像这样

        crit1      crit2     crit3
average 43833.33  40250      ...
median  40500     40250
max     50000     41000

根据我发现的相关帖子和网页,似乎ddply from the plyr package可能会有所帮助,但无法弄清楚如何避免我通过组合获得聚合标准。

2 个答案:

答案 0 :(得分:2)

您需要一个可重复性最小的示例:

#set up some data
set.seed=129
sdt <- data.frame( sal=round(rgamma(10,5,1/8000),-2),
                 crit1=sample(c(TRUE,FALSE),10,replace=TRUE),
                 crit2=sample(c(TRUE,FALSE),10,replace=TRUE))

现在:

byl <- function(ind,x) summary(x[ind])
sapply(sdt[,-1],byl,sdt[,1])

做了你似乎要求的事情。

答案 1 :(得分:-2)

另一种方法是使用聚合函数。例如:

aggregate(salary~crit1+crit2+crit3, DatasetName, mean)

按所有三个标准产生平均工资

你可以用其他统计数据替换均值。