我正在构建一个与bipartite
包一起使用的邻接矩阵。每一行和每一列代表两个不同类的实体,并代表第一类m[i,j]
实体和第二类实体之间的交互。我目前有一个表格的数据框i
j
df
s1 s2 weight
1 261 446 1
2 188 259 4
3 144 1119 1
其中,例如,第 2 行表示权重为 4 的成员 188s1
和 259之间的交互。s2
所以m[259,188]
应该是 4。但是,由于不是 1 和 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
)并以这种方式对其进行索引会效率低下/笨拙。我还考虑保留 and 的唯一元素的向量s1
并s2
使用 eg m[which(unique.s2 == i), which(unique.s1 == j)]
,但同样,这似乎是一个次优的解决方案。由于并非 min(s1) 和 max(s1) 之间的每个数字都在矩阵中,因此我不能只制作维度 c(max(s1), max(s2)) 并直接使用索引。
有没有更好的方法来实现我的目标?