你可以用 aggregate :
aggregate
aggregate(cbind(X, Y) ~ Occupation, df, FUN = sum) # Occupation X Y #1 Agriculture 2 2 #2 Business 3 1 aggregate(cbind(X, Y) ~ Class, df, FUN = sum) # Class X Y #1 Lower 3 1 #2 Upper 2 2
另一种方式是 xtabs :
xtabs
xtabs(cbind(X, Y) ~ Occupation, df) #Occupation X Y # Agriculture 2 2 # Business 3 1 xtabs(cbind(X, Y) ~ Class, df) #Class X Y # Lower 3 1 # Upper 2 2
要自动执行:
lapply(c('Class', 'Occupation'), function(x) { myform <- as.formula(paste('cbind(X, Y) ~', x)) xtabs(myform, df) })
如果我理解得很好,你可以使用 dplyr 包装和 group_by 功能是为了做到这一点。
dplyr
group_by
您可以使用 group_by 功能和 summarise_each 以下列方式:
summarise_each
library(dplyr) yourdata %>% group_by(Occupation) %>% summarise_each(Occupation,funs(sum),column4:column5)
我认为这应该适合你的情况。