减去包含NA的两个数据帧,在相等的地方得到零

时间:2018-08-29 16:28:15

标签: r vectorization na

我想通过减法比较两个大的数值数据帧,即最快的矢量化,以找出两者相等的地方。 出于我的目的,如果两者在相同位置包含NA,则在该位置它们相等。 但是,当减去而不是零时,我将得到NA。 有没有办法告诉R NA-NA = 0?

例如:

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 个答案:

答案 0 :(得分:1)

由于我们正在处理数字数据框,因此最好先将它们转换为矩阵以提高速度。然后,我们可以使用以下基于元素的逻辑:

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))