我反覆使用的設計模式之一是在數據框上執行「group by」或「split,apply,combine(SAC)」,然後加入聚合數據回到原始數據。例如,在計算每個縣與許多州和縣的數據框中的州平均數偏差時,這很有用。我的總計算很少是一個簡單的意思,但它是一個很好的例子。我經常解決這一問題的方式如下:將聚合值加回到原始數據框
require(plyr)
set.seed(1)
## set up some data
group1 <- rep(1:3, 4)
group2 <- sample(c("A","B","C"), 12, rep=TRUE)
values <- rnorm(12)
df <- data.frame(group1, group2, values)
## got some data, so let's aggregate
group1Mean <- ddply(df, "group1", function(x)
data.frame(meanValue = mean(x$values)))
df <- merge(df, group1Mean)
df
將會產生很好的彙總數據,如下列:
> df
group1 group2 values meanValue
1 1 A 0.48743 -0.121033
2 1 A -0.04493 -0.121033
3 1 C -0.62124 -0.121033
4 1 C -0.30539 -0.121033
5 2 A 1.51178 0.004804
6 2 B 0.73832 0.004804
7 2 A -0.01619 0.004804
8 2 B -2.21470 0.004804
9 3 B 1.12493 0.758598
10 3 C 0.38984 0.758598
11 3 B 0.57578 0.758598
12 3 A 0.94384 0.758598
這工作,但沒有這樣做,其提高可讀性的替代方式,性能,等等?代碼
請參閱http://stackoverflow.com/questions/4998846/applying-an-aggregate-function-over-multiple-different-slices/5000040#5000040 – 2011-02-17 15:46:40