我有两个数据框A
和B
,两个相同的维度。不保证行和列标签在帧之间的顺序相同。
两个帧都包含值0
和1
,1
表示在帧的行和列之间存在有向“边缘”(因此,0
表示没有连接)。
我想找到两个框架共有的“边缘”。换句话说,我想要一个与A
和具有相同维度的数据框B
,其中包含在 和 的行和列中都有1
a 的值。1
A
B
目前,我正在遍历行和列并测试两者是否都是1
.
这行得通,但我想有一种更有效的方法可以做到这一点。有没有办法对数据帧的行向量进行等效的“按位与”运算,它返回一个行向量,我可以将其填充回一个新的数据帧?还是有另一种更智能(更有效)的方法?
编辑
矩阵乘法比我最初的方法快得多。排序是完成这项工作的关键。
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
}