Один из шаблонов проектирования, которые я использую снова и снова, выполняет "группу за" или "разделять, применять, комбинировать (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 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
Это работает, но есть ли альтернативные способы сделать это, которые улучшают читаемость, производительность и т.д.?