2012-06-29 222 views
4

我正在尋找關於如何使用aggregate和R.計算手段彙總數據

說死簡單的例子,我有以下的數據幀:

A  B 
100 85 
200 95 
300 110 
400 105 

而且我想計算平均值的一些範圍,結果如下:

RANGE   MEAN 
100-200  90 
300-400  107.5 

我怎麼會去這樣做,cast()aggregate()

+0

你的問題不清楚。你想聚合什麼變量(你的意思是「某些範圍」)? –

+0

哦,忘了改變第二張表的標題 - 現在修好了。 – Johnny

回答

14

假設你的數據幀被命名爲 「X」:

aggregate(x$B, list(cut(x$A, breaks=c(0, 200, 400))), mean) 
#  Group.1  x 
# 1 (0,200] 90.0 
# 2 (200,400] 107.5 

隨着 「data.table」,你可以做到以下幾點:

library(data.table) 
as.data.table(x)[, .(RANGE = mean(B)), by = .(MEAN = cut(A, c(0, 200, 400)))] 
#   MEAN RANGE 
# 1: (0,200] 90.0 
# 2: (200,400] 107.5 
+0

對於更好看的輸出:'aggregate(list(mean = df $ B),list(range = cut(df $ A,breaks = c(0,200,400))),mean)' – A5C1D2H2I1M1N2O1R2T1

3

以下是aggregate用法的基本示例。

> foo = data.frame(A=c(100,200,300,400),B=c(85,95,110,105)) 
> aggregate(foo$B,by=list(foo$A<250),FUN=mean) 
    Group.1  B 
1 FALSE 107.5 
2 TRUE 90.0 
> 
2

或者相同與cuttapply

foo <- data.frame(A=c(100,200,300,400),B=c(85,95,110,105)) 
tapply(foo$B, cut(foo$A, breaks=seq(0, 400, 200)), mean) 
    (0,200] (200,400] 
    90.0  107.5