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 を返すため、関心のある列を使用して抽出するだけです。listdo.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 に答える