R:检查 df 行中的任何值是否不存在于其他 df 的同一行中

R: Check if any value in df row is not present in same row in other df

我有两个 data.frame(),行数相同但列数不同:

df1 = data.frame(v1=c(NA,NA,2),v2=c(4,3,NA),v3=c(1,2,2))
df2 = data.frame(v4=c(NA,NA,NA), v5=c(NA,4,2))

> df1
  v1 v2 v3
1 NA  4  1
2 NA  3  2
3  2 NA  2

> df2
  v4 v5
1 NA NA
2 NA  4
3 NA  2

我需要检查 row-wise df2 的第 x 行中是否有任何值 不存在 在相应的行中在 df1.我也想忽略 NA.

结果应该是

0
1
0

因为值 4(在 df2,第 2 行)不存在 df1 的第 2 行(其中 32 存在)。

在我使用的瞬间:

for (row in seq(1:nrow(df1))){
  print(as.numeric(FALSE %in% (df2[row,] %in% df1[row,])))
}

但是,就性能而言,这似乎是一个糟糕的解决方案。

我们可以使用 Map/mapply 在按行拆分数据集(asplit - MARGIN = 1)后循环 list,然后使用 %in%创建一个逻辑并将其强制转换为二进制 (+)

+(mapply(\(x, y) any(!y[complete.cases(y)] %in% 
    x[complete.cases(x)]),  asplit(df1, 1), asplit(df2, 1)))
[1] 0 1 0
for (row in 1:nrow(df1)){
  print(as.numeric(any(!df2[row,] %in% df1[row,], na.rm = T)))
}