我有 2 个数据框。
df1-
col1 col2 col3 col4 col5 名称1 A 23 xy 名称1 A 29 xy 名称1 B 17 xy 名称1 A 77 xy
df2-
col1 col2 col3 B 17 LL1 Z 193 KK1 77 LO9 Y 80 LK2
如果 df1 的 col2 和 col3 不等于 df2 的 col1 和 col2,我想从 df1 返回这些行。
输出应该是 -
col1 col2 col3 col4 col5 名称1 A 23 xy 名称1 A 29 xy
我发现的解决方案-
unique.rows <- function (df1, df2) {
out <- NULL
for (i in 1:nrow(df1)) {
found <- FALSE
for (j in 1:nrow(df2)) {
if (all(df1[i,2:3] == df2[j,1:2])) {
found <- TRUE
break
}
}
if (!found) out <- rbind(out, df1[i,])
}
out
}
该解决方案运行良好,但最初,我申请的是小型数据框。现在我的 df1 有大约 10k 行,而 df2 有大约 700 万行。它刚刚从过去 2 天开始运行。谁能建议一个快速的方法来做到这一点?