2つのデータフレームA
とがありB
、どちらも同じ次元です。行と列のラベルは、フレーム間で同じ順序になるとは限りません。
両方のフレームには値0
とが含まれ、フレームの行と列の間に有向の「エッジ」が存在することを示します(したがって、1
接続がないことを示します)。1
0
両方のフレームに共通する「エッジ」を見つけたいと思います。A
つまり、とと同じ次元のデータフレームが必要です。このデータフレームには、との両方の行と列にが存在する値がB
含まれています。1
1
A
B
現在、行と列をループして、両方がであるかどうかをテストしています1
。
これは機能しますが、これを行うためのより効率的な方法があると思います。データフレームの行ベクトルに対して「ビット単位のAND」演算と同等の操作を行う方法はありますか?これは、新しいデータフレームに戻すことができる行ベクトルを返しますか?または、別のよりインテリジェントな(そして効率的な)アプローチはありますか?
編集
行列の乗算は、私の最初のアプローチよりもかなり高速です。並べ替えは、この作業を行うための鍵でした。
findCommonEdges <- function(edgesList) {
edgesCount <- length(edgesList)
print("finding common edges...")
for (edgesIdx in 1:edgesCount) {
print(paste("...searching against frame", edgesIdx, sep=" "))
edges <- edgesList[[edgesIdx]]
if (edgesIdx == 1) {
# define commonEdges data frame as copy of first frame
commonEdges <- edges
next
}
#
# we reorder edge data frame row and column labels
# to do matrix multiplication and find common edges
#
edges <- edges[order(rownames(commonEdges)), order(colnames(commonEdges))]
commonEdges <- commonEdges * edges
}
commonEdges
}