2

2つのデータフレームAとがありB、どちらも同じ次元です。行と列のラベルは、フレーム間で同じ順序になるとは限りません。

両方のフレームには値0とが含まれ、フレームの行と列の間に有向の「エッジ」が存在することを示します(したがって、1接続がないことを示します)。10

両方のフレームに共通する「エッジ」を見つけたいと思います。Aつまり、とと同じ次元のデータフレームが必要です。このデータフレームには、との両方の行と列にが存在する値がB含まれています。11AB

現在、行と列をループして、両方がであるかどうかをテストしています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
}
4

2 に答える 2

4

そのために通常の乗算​​を使用できます。:-)

// generate data
a = matrix(rbinom(100, 1, 0.5), nrow = 10)
b = matrix(rbinom(100, 1, 0.5), nrow = 10)

a * b // this is the result!

探している「ビットごとの and」である論理 & 演算子を使用することもできます。式は次(a & b) + 0 のようになります (+ 0ブール値から整数に変換されるだけです)。

注: データフレームでもまったく同じように機能します。

于 2011-12-02T21:26:22.487 に答える
0

もしかしてこういうこと?

df1 <- as.data.frame(matrix(sample(0:1,25,replace = TRUE),5,5))
df2 <- as.data.frame(matrix(sample(0:1,25,replace = TRUE),5,5))
df3 <- matrix(0,5,5)
df3[df1 == 1 & df2 == 1] <- 1
> df3
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    0    0    0    1    1
[3,]    1    1    1    0    0
[4,]    0    1    0    0    0
[5,]    0    0    0    0    0

マトリックスになりましたが、必要に応じて、再びデータ フレームに変換できます。しかし、0/1 データを扱っているだけなら、行列を使用しない本当の理由はありません。(繰り返しますが、私はあなたの特定の状況について多くの詳細を知りません...)

于 2011-12-02T21:24:49.637 に答える