代码之家  ›  专栏  ›  技术社区  ›  Omry Atia

减去两个包含NA的数据帧,得到等于0的值

  •  0
  • Omry Atia  · 技术社区  · 6 年前

    我想通过减法比较两个大的数字数据帧,即矢量化,这是最快的,以便找出两者相等的地方。 出于我的目的,如果这两个包含NA的位置相同,那么它们在这个位置上是相等的。

    例如:

    df1 = data.frame(x = c(1,2,3), y = c(4,5,NA))
    df2 = data.frame(x = c(1,2,3), y = c(4,5,NA))
    
    df1-df2:
    
    x  y
    0  0
    0  0
    0 NA
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   acylam    6 年前

    因为我们处理的是数字数据帧,所以最好先将它们转换为矩阵以提高速度。然后我们可以使用以下元素逻辑:

    mat1 <- as.matrix(df1)
    mat2 <- as.matrix(df2)
    
    equal_mat <- (mat1 == mat2) | (is.na(mat1) & is.na(mat2))
    colnames(equal_mat) <- names(df1)
    

             x     y
    [1,] FALSE  TRUE
    [2,] FALSE FALSE
    [3,]  TRUE  TRUE
    

    数据

    df1 = data.frame(x = c(1,3,3), y = c(4,6,NA))
    df2 = data.frame(x = c(2,2,3), y = c(4,5,NA))