【发布时间】:2012-05-04 17:04:23
【问题描述】:
我正在构建一个与bipartite 包一起使用的邻接矩阵。每一行每一列代表两个不同类的实体,m[i,j]代表第一类实体i和第二类实体j之间的交互。我目前有一个表格的数据框df
s1 s2 weight
1 261 446 1
2 188 259 4
3 144 1119 1
其中,例如,第 2 行表示 s1 的成员 188 和权重为 4 的 s2 的 259 之间的交互。所以 m[259,188] 应该是 4。但是,因为不是 1 和 max(df$s1, df$s2) 之间的每个值将被表示,使用普通索引将不起作用。如果可能的话,我想要这样的东西:
[,144] [,188] [,261]
[259,] 0 4 0
[446,] 0 0 1
[1119,] 1 0 0
我知道我可以将列和行重命名为字符向量,但我认为将其设置为 as.character(unique(df$s1))(s2 也是如此)并以这种方式对其进行索引会效率低下/笨拙。我还考虑保留 s1 和 s2 的独特元素的向量并使用例如m[which(unique.s2 == i), which(unique.s1 == j)],但同样,这似乎是一个次优的解决方案。由于不是 min(s1) 和 max(s1) 之间的每个数字都在矩阵中,因此我不能只制作维度 c(max(s1), max(s2)) 并直接使用索引。
有没有更好的方法来实现我的目标?
【问题讨论】:
-
您描述了稀疏矩阵之类的东西。我认为它们应该出现在 R 中。
标签: r