我有一个通过流量数据显示成员之间的通过流量,这是示例数据集
它以连续的行显示成员之间的交互。我想计算那些交互,并获得一个新的数据集,显示每个成员之间发生了多少次交互,方向无关紧要
例如:
between 26 and 11 = X
between 26 and 27 = Y
我只是不知道我可以使用哪个函数以及如何为这个计算编写代码。谢谢
您可以使用包中的rollaply
函数zoo
来查找所有交互。这些交互的频率可以使用 来计算table
。(我假设你的对象被称为dat
。)
library(zoo)
table(as.data.frame(rollapply(dat[[1]], 2, sort)))
结果:
V2
V1 4 8 10 11 13 17 19 25 26 27 53
4 2 13 17 1 2 5 6 3 1 9 4
8 0 2 14 11 10 4 5 0 13 13 11
10 0 0 3 9 7 2 4 2 8 11 8
11 0 0 0 1 6 5 4 4 5 4 25
13 0 0 0 0 0 1 3 5 7 9 8
17 0 0 0 0 0 0 1 1 1 5 5
19 0 0 0 0 0 0 1 1 1 5 4
25 0 0 0 0 0 0 0 0 5 8 5
26 0 0 0 0 0 0 0 0 1 5 3
27 0 0 0 0 0 0 0 0 0 0 1
53 0 0 0 0 0 0 0 0 0 0 1
矩阵的下三角部分仅包含零,因为方向无关紧要。
如果您对相同值之间的交互不感兴趣,请使用以下命令:
table(as.data.frame(rollapply(rle(dat[[1]])$values, 2, sort)))
V2
V1 8 10 11 13 17 19 25 26 27 53
4 13 17 1 2 5 6 3 1 9 4
8 0 14 11 10 4 5 0 13 13 11
10 0 0 9 7 2 4 2 8 11 8
11 0 0 0 6 5 4 4 5 4 25
13 0 0 0 0 1 3 5 7 9 8
17 0 0 0 0 0 1 1 1 5 5
19 0 0 0 0 0 0 1 1 5 4
25 0 0 0 0 0 0 0 5 8 5
26 0 0 0 0 0 0 0 0 5 3
27 0 0 0 0 0 0 0 0 0 1