Это должно сделать это
# generate dummy data
df = data.frame(
Sum = rnorm(10),
source_id = sample(10, 5, replace = T),
type_id = sample(10, 5, replace = T),
variety = sample(10, 5, replace = T)
)
index = names(df)[-1]
temp = expand.grid(0:1, 0:1, 0:1)[-1,]
require(plyr)
cubedf = adply(temp, 1, function(x)
ddply(df, index[x == 1], summarize, SUM = sum(Sum)))
РЕДАКТИРОВАТЬ: АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ (с использованием кода, заимствованного у Joris)
library(plyr)
# list factor variables
index = names(df)[-1]
# generate all combinations of factor variables
combs = unlist(llply(1:3, combn, x = index, simplify = F), recursive = F)
# calculate sum for each combination
cubedf = ldply(combs, function(var)
ddply(df, var, summarize, SUM = sum(Sum)))