如何编写代码以在R中生成汇总表?

时间:2013-10-30 20:28:27

标签: r

这里我想用min,max和mean来汇总数据。

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

2 个答案:

答案 0 :(得分:2)

由于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

答案 1 :(得分: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