这里我想用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
答案 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
。