我想通过减法比较两个大的数值数据帧,即最快的矢量化,以找出两者相等的地方。 出于我的目的,如果两者在相同位置包含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
答案 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))