减去两个包含 NA 的数据帧以获得零
subtract two data frames containing NA's to get zero where equal
我想通过减法比较两个大的数字数据帧,即最快的矢量化,以便找出两者相等的地方。
出于我的目的,如果两者在相同位置包含 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
由于我们处理的是数字数据帧,为了提高速度,最好先将它们转换为矩阵。然后我们可以使用以下元素逻辑:
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))
我想通过减法比较两个大的数字数据帧,即最快的矢量化,以便找出两者相等的地方。 出于我的目的,如果两者在相同位置包含 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
由于我们处理的是数字数据帧,为了提高速度,最好先将它们转换为矩阵。然后我们可以使用以下元素逻辑:
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))