我有两个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
)后循环list
s,然后使用%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)))
}