提问人:Luc 提问时间:11/3/2016 最后编辑:NimanthaLuc 更新时间:12/7/2021 访问量:3318
Aggregate() + quantile(),输出作为数据帧
Aggregate() + quantile() with output as data frame
问:
我正在使用 ,见下文。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%" ...
答: 暂无答案
评论
result$value
实际上是一个矩阵。但是,您可以修复它。或者使用替代系统,例如可以更好地处理此类聚合的 OR。do.call(data.frame, result)
dplyr
data.table