我有一个通行证交通数据,它显示了成员之间的通行证交通,here's the sample dataset
它显示了连续行中成员之间的交互。我想对这些交互进行计数,并获得一个新的数据集,该数据集显示每个成员的成员之间发生了多少交互,方向并不重要
例如:
between 26 and 11 = X
between 26 and 27 = Y我只是不知道我可以使用哪个函数,以及我如何为这个计算编写代码。谢谢
发布于 2012-12-13 20:12:50
您可以使用zoo包中的rollaply函数来查找所有交互。这些交互的频率可以使用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 1https://stackoverflow.com/questions/13859374
复制相似问题