【问题标题】:Get aggregates (average, median, max, ...) by multiple criteria按多个条件获取聚合(平均值、中值、最大值、...)
【发布时间】:2015-11-13 10:34:12
【问题描述】:

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

    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 的所有行的平均值/中值/最大值等。我对标准组合感兴趣。

有点像这样

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

根据我发现的相关帖子和网页,似乎ddply from the plyr package 可能会有所帮助,但尚不知道如何避免我通过标准的组合获得聚合.

【问题讨论】:

    标签: r aggregation plyr


    【解决方案1】:

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

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

    按照你的要求去做。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 这不是在回答问题中的问题。您可能需要相应地更新(不是我的反对票)
      猜你喜欢
      • 2021-02-14
      • 2015-04-12
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多