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 行(其中 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
,然后使用 %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)))
}
我有两个 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 行(其中 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
,然后使用 %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)))
}