0

在这里,我想按最小值、最大值和平均值来汇总数据。

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
4

2 回答 2

3

由于在这种情况下tapply返回 a 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
于 2013-10-31T13:25:08.663 回答
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您是否想进一步微调演示文稿。

于 2013-10-30T23:50:02.903 回答