创建表时的Sum列

时间:2015-05-21 12:37:48

标签: r aggregate

我在 R

中有以下数据框
'Drugs abuse'

想要在这样的表中得到它:

   origin destination amount
1       1           2     50
2       1           2    100
3       1           2     20
4       1           3    100
5       2           3     30
6       2           3     50
7       2           1     20
8       3           2     10
9       3           2     40
10      3           1     50

我认为它应该是 1 2 3 1 0 170 100 2 20 0 80 3 50 50 0 函数,但这只能得到以下结果:

table

我无法弄清楚如何将 1 2 3 1 0 3 1 2 1 0 2 3 1 2 0 列的计数作为连续性表中的值。有小费吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试xtabs

 xtabs(amount~origin+destination, df1)
 #        destination
 #origin   1   2   3
 #     1   0 170 100
 #     2  20   0  80
 #     3  50  50   0

或者使用tapply amd将NA替换为0

 with(df1, tapply(amount, list(origin, destination), FUN=sum))

正如@David Arenburg所提到的,这也可以通过reshape2tidyr

这样的包来完成
 library(reshape2)
 acast(df1, origin~destination, value.var='amount', sum)