如何按组对“Origin-Destination”数据框求和?

时间:2014-12-07 11:57:45

标签: r sum summary

我有这种数据框:

df<-data.frame(Origin=c(1,1,1,2,2,3,3,3),
               Var=   c(2,4,1,3,5,6,2,1),
               Desti= c(2,2,3,2,1,2,1,3))

我希望得到Var的总和,Origin的每个值,按Desti(Out.x)和Origin分组(In.x )。结果将是df

  Out.1 Out.2 Out.3 In.1 In.2 In.3
1     0     6     1    0    5    2
2     5     3     0    6    3    6
3     2     6     1    1    0    1

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

可能有帮助

res <-  cbind(xtabs(Var~., df), xtabs(Var~Desti+Origin, df))
colnames(res) <- paste(rep(c("Out", "In"), each=3), 1:3, sep=".")
res
#  Out.1 Out.2 Out.3 In.1 In.2 In.3
#1     0     6     1    0    5    2
#2     5     3     0    6    3    6
#3     2     6     1    1    0    1

或者,以上可以简化

 r1 <- xtabs(Var~., df)
 res <- cbind(r1, t(r1)) #change the `column names` accordingly

或使用reshape2

library(reshape2)
res1 <- cbind(acast(df, Origin~Desti, value.var='Var', sum),
               acast(df, Desti~Origin, value.var='Var', sum))
colnames(res1) <- colnames(res)