2013-10-30 39 views
0

這裏我想用min,max和mean來概括數據。如何編寫代碼以在R中生成彙總表?

set.seed(55775) 
x <- round(runif(150000,1,1000),2) 
g <- sample(LETTERS[1:4],150000,replace=T) 

我知道tapply可以做總結,tapply(x,g,summary),它會給出同樣的答案如下表,但我不知道如何生成此表整齊而不是使用tapply的...

g MIN MAX  MEAN 
A 1.06 999.94 500.5395 
B 1.01 999.95 501.6863 
C 1.01 999.99 503.8504 
D 1.05 999.97 500.5327 
+3

請[SO搜索,我相信你會找到很好的答案,你可以適應你自己的數據](http://stackoverflow.com/search?q= [r] +總結+統計+每+組)。 [這也是一個很好的起點](http://stackoverflow.com/questions/3505701/r-grouping-functions-sapply-vs-lapply-vs-apply-vs-tapply-vs-by-vs-aggrega) 。乾杯。 – Henrik

+2

[這是另一個。](http://stackoverflow.com/questions/7449198/quick-elegant-way-to-construct-mean-variance-summary-table) – gung

回答

0

就快...

> t1 <- tapply(x, g, summary) 
### sapply is basically loop over 4x items in list `t1` to extract values 
### then t() to transpose to fit your example 
> t2 <- t(sapply(1:nrow(t1), function (i) t1[[i]][c("Min.", "Max.", "Mean")])) 
### rename per your example: 
> rownames(t2) <- names(t1) 
> colnames(t2) <- c(" MIN", " MAX", " MEAN") 

,並提供:

> t2 
    MIN MAX MEAN 
A 1.06 999.9 500.5 
B 1.01 1000.0 501.7 
C 1.01 1000.0 503.9 
D 1.05 1000.0 500.5 

請參閱?format如果您想進一步微調演示文稿。

1

由於tapply在這種情況下返回list,你可以只使用do.call(rbind, ...)並提取了列你有興趣:

do.call(rbind, tapply(x, g, summary))[, c("Min.", "Max.", "Mean")] 
# Min. Max. Mean 
# A 1.06 999.9 500.5 
# B 1.01 1000.0 501.7 
# C 1.01 1000.0 503.9 
# D 1.05 1000.0 500.5