Aggregate() + quantile(),输出作为数据帧

Aggregate() + quantile() with output as data frame

提问人:Luc 提问时间:11/3/2016 最后编辑:NimanthaLuc 更新时间:12/7/2021 访问量:3318

问:

我正在使用 ,见下文。quantile()aggregate()

结果的格式为数据框,但是,如 中所示,实际分位数是列中的列表。如何使输出成为所有“列”都是实际列的数据帧(即名称(结果)--> “组” “子组” “值.0%” “值.25%” “值.50%” “值.75%” “值.100%”str()

(我不在乎实际姓名,我只想能够使用setNames())

n=1000
df <- data.frame(group=sample(c("A", "B", "C"), n, replace=T), 
                 subgroup=sample(c("g1", "g2"), n, replace=T), 
                 value=sample(1:10000, n, replace=T))
head(df)

result <- aggregate(value ~ group + subgroup, df, function(x) quantile(x, probs = seq(0,1, 0.25)))

> result
  group subgroup value.0% value.25% value.50% value.75% value.100%
1     A       g1    26.00   3088.00   5738.00   7473.00    9852.00
2     B       g1    26.00   2450.00   4592.50   7319.00    9989.00
3     C       g1    17.00   2989.00   5565.00   7611.00    9944.00
4     A       g2    96.00   2843.75   4912.00   7719.50    9815.00
5     B       g2    77.00   2802.50   4725.50   6996.75    9950.00
6     C       g2   115.00   2606.00   4776.50   7673.25    9878.00


> str(result)
'data.frame':   6 obs. of  3 variables:
 $ group   : Factor w/ 3 levels "A","B","C": 1 2 3 1 2 3
 $ subgroup: Factor w/ 2 levels "g1","g2": 1 1 1 2 2 2
 $ value   : num [1:6, 1:5] 26 26 17 96 77 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr  "0%" "25%" "50%" "75%" ...
r 数据操作

评论

6赞 thelatemail 11/3/2016
result$value实际上是一个矩阵。但是,您可以修复它。或者使用替代系统,例如可以更好地处理此类聚合的 OR。do.call(data.frame, result)dplyrdata.table

答: 暂无答案