r - R 中数据帧行上的按位 AND 或类似运算?

标签 r vector bit-manipulation dataframe operation

我有两个数据框AB,它们的尺寸相同。不保证帧之间的行和列标签的顺序相同。

两个帧都包含值 01,其中 1 表示帧的行和列之间存在有向“边缘” (相应地,0 表示没有连接)。

我想找到两个框架共有的“边缘”。换句话说,我想要一个与 AB 尺寸相同的数据框,其中包含 1 值,其中有一个 1 位于 AB 的一行和一列。

目前,我正在循环遍历行和列并测试两者是否都是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
}

最佳答案

你可以使用普通的乘法来实现! :-)

// 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!

您还可以使用逻辑&运算符,这是您正在寻找的“按位与”。您的表达式将类似于 (a & b) + 0 (+ 0 只会从 bool 值转换回整数)。

注意:对于数据帧,其工作方式完全相同。

关于r - R 中数据帧行上的按位 AND 或类似运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362810/

相关文章:

vector - 在传递给不安全代码之前正确初始化向量

r - 无法使用 textbf 写粗体字符

r - 增加 R iGraph 顶点之间的空间

R将线性模型传递给函数内的另一个函数

r - PCA:为什么我从 princomp() 和 prcomp() 得到如此不同的结果?

.net - XNA - 为什么它使用 Vector2 而不是 Point?

algorithm - 矢量点积计算的时间和空间复杂度

c++ - 位移位 - 移动移位值

c - 当按位与应用于负数时会发生什么?

c - 从 unsigned char (Little endian) 中检索正或负 n 位