2014-09-29 39 views
2

我使用tapply按的因子生成摘要。例如,将数据帧摘要保存为数据帧

s <- with(mtcars, tapply(mpg, cyl, summary)) 

我看到s的类是一个数组。有没有简单的方法将tapply输出转换为另一个data.frame

+0

'骨料()'可能是一个更好的选择,功能比'tapply ()'给出你想要的输出。 – MrFlick 2014-09-29 19:12:43

+0

@MrFlick,来自'aggregate'的聚合列将是一个'matrix'。它需要一个(有点笨拙的)'do.call(data.frame,aggregate(...))'类型的方法。 – A5C1D2H2I1M1N2O1R2T1 2014-09-29 19:18:16

+0

感谢您的测试@AnandaMahto。我在移动设备上,我不能。 – MrFlick 2014-09-29 19:19:37

回答

4

典型的方法是使用do.call(rbind, ...),像这样:

do.call(rbind, s) 
# Min. 1st Qu. Median Mean 3rd Qu. Max. 
# 4 21.4 22.80 26.0 26.66 30.40 33.9 
# 6 17.8 18.65 19.7 19.74 21.00 21.4 
# 8 10.4 14.40 15.2 15.10 16.25 19.2 

正如意见中提到的@akrun早些时候,它包裹在as.data.frame会得到你data.frame


如果你是开放的替代品,你也可以尝试“data.table”,用它你可以这样做:

library(data.table) 
as.data.table(mtcars)[, as.list(summary(mpg)), by = cyl] 
# cyl Min. 1st Qu. Median Mean 3rd Qu. Max. 
# 1: 6 17.8 18.65 19.7 19.74 21.00 21.4 
# 2: 4 21.4 22.80 26.0 26.66 30.40 33.9 
# 3: 8 10.4 14.40 15.2 15.10 16.25 19.2