按多个条件获取聚合(平均值、中位数、最大值...)
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)
根据所有三个标准得出平均工资
您可以用其他统计数据替换平均值。
我有一个这种形式的数据框
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)
根据所有三个标准得出平均工资
您可以用其他统计数据替换平均值。