我有这种数据框:
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
有什么想法吗?
答案 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)