【发布时间】:2013-03-04 20:50:40
【问题描述】:
我正在尝试找到一种更快的方法来汇总个人在会话中的出现次数,以计算他们的关系水平。基本上,我想为每两个人计算至少观察到其中一个人的次数。我在这里查看了包括melt 和acast 在内的答案,但没有找到使用它们的好方法。这是我效率低下的代码:
presence=array(0,c(8,10)) # session by individual
counter=array(0,c(10,10))
# put some data into the array:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 1 0 0 0 0 0 0 0 0
[2,] 0 0 1 1 1 1 0 0 0 0
[3,] 0 0 0 0 0 0 1 0 0 0
[4,] 0 0 0 0 0 0 0 1 0 0
[5,] 0 0 0 0 0 0 0 1 0 0
[6,] 0 0 0 0 0 0 0 0 1 0
[7,] 0 0 0 0 0 0 0 0 1 0
[8,] 0 0 1 0 1 1 0 0 0 1
for (a in 1:10){
for (b in 1:10){
for (c in 1:8) {
if ((presence[c,a]>0)|(presence[c,b]>0)) counter[a,b]=counter[a,b]+1
# calculate something using this counter for each two individuals a and b
}
}
}
感谢您的帮助。 阿米亚尔
【问题讨论】:
-
我认为您需要再解释一下您的问题,我不知道这里发生了什么。你的原始数据是什么样的?这段代码在哪里表示?如果您想根据原始数据计算人们在事件中的共现,那当然是可能的,我建议您查看一些 igraph 社交网络分析库。
-
你的问题没有任何意义。您使用“多年来个人在会话中的出现次数”这样的语句而没有定义任何术语,并且您提供的代码是垃圾。
-
存在数组存储了第 i 年会话 c 中存在的个人。内部 for 循环计算其中至少一个(a 或 b)在一年中出现的次数(即对所有会话求和)。我希望现在更清楚了。
-
一点都不清楚。只有 450 万个零。认真重新考虑您的要求以及您如何提出问题。 1. 使用较小的代表性样本。 2. 确保代码可运行。 (你的不是) 3. 彻底解释你的情况。
-
我将代码更改为更简单并专注于我的问题。