按多个条件获取聚合(平均值、中位数、最大值...)

Get aggregates (average, median, max, ...) by multiple criteria

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

    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 的那些行,例如average/median/max 在 crit1 为 TRUE 的所有行上,average/median/max 在 crit2 为 TRUE 的所有行上,等等。我 NOT 对条件组合感兴趣。

有点像这样

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

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

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

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

是否满足您的要求。

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

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

根据所有三个标准得出平均工资

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