bipartite
パッケージで使用する隣接行列を作成しています。各行と列は、2つの異なるクラスのエンティティを表し、最初のクラスのエンティティと2番目のクラス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の間の相互作用を表します。したがって、4である必要があります。ただし、1との間のすべての値が表されるわけではないため、通常のインデックスを使用しても機能しません。可能であれば、次のようなものが必要です。s2
m[259,188]
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))にして、インデックスを直接使用することはできません。
私の目標を達成するためのより良い方法はありますか?