R:检查df行中的任何值是否在其他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

我需要按行检查如果df2的x行中有不存在的值在df1的对应行中。我也想忽略NA

结果应为

0
1
0

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

当我使用:

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

然而,对于性能来说,这似乎是一个糟糕的解决方案。

我们可以使用Map/mapply在按行拆分数据集(asplit-MARGIN = 1)后循环lists,然后使用%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)))
}

最新更新