2014-09-29 40 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