【问题标题】:R create a matrix of occurence [closed]R创建发生矩阵[关闭]
【发布时间】: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. 彻底解释你的情况。
  • 我将代码更改为更简单并专注于我的问题。

标签: arrays r matrix


【解决方案1】:

好的,仍然不是很清楚,但我认为存在现在是一个邻接矩阵,其中列代表用户,行代表事件,所以presence[i,j] 表示用户 i 参加了事件 j。

如果我的解释正确,那么计数似乎是共现矩阵,对吗? count[i,j]应该记录用户i和j一起参加的活动次数吗?

如果您查看有关 2 模式社交网络分析的文献,特别是从属网络,则可以直接计算:

count = t(presence)%*%presence

现在我将使用您自己的数据进行检查以确保其准确无误:只需随机检查几个单元格的数量并将它们与存在情况进行比较。

另外,顺便说一句,在这类矩阵中,行通常是用户,事件是列。

编辑:如果您希望计数成为任何一个用户参加的活动数量(而不是他们都参加的活动数量),那么它是一个联合而不是一个交叉点。所以这将是用户我参加的活动数量 + 用户 j 参加的活动数量 - 交叉点

x = t(presence)%*%presence
numEvents = diag(x)
counts = matrix(rep(numEvents,dim(x)[1]),nrow=dim(x)[1],byrow=TRUE)+matrix(rep(numEvents,dim(x)[1]),nrow=dim(x)[1],byrow=FALSE)-x

这不是最优雅的解决方案,但它应该可以工作

【讨论】:

  • 谢谢,但这并不是我要找的,因为它会计算 CO-OCCURRENCE,而我想计算至少其中一个存在的所有情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2020-01-29
  • 2020-11-24
相关资源
最近更新 更多