1

我有一个通过流量数据显示成员之间的通过流量,这是示例数据集

它以连续的行显示成员之间的交互。我想计算那些交互,并获得一个新的数据集,显示每个成员之间发生了多少次交互,方向无关紧要

例如:

between 26 and 11 = X
between 26 and 27 = Y

我只是不知道我可以使用哪个函数以及如何为这个计算编写代码。谢谢

4

1 回答 1

2

您可以使用包中的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
于 2012-12-13T12:12:49.920 回答