【发布时间】:2014-09-08 15:50:55
【问题描述】:
我有两个大型数据集 df1 和 df2。 df2 是 df1 的子集。我想将 df2 中存在的 df1 行标记为“是”,而将其他行标记为“否”。行不包含任何唯一变量值。我想匹配多个变量的值。但是,我使用 %in% 运算符得到了不正确的结果。我还尝试了一个嵌套的 for 循环,该循环遍历 df1 的每一行并将其与 df2 的每一行进行比较。它会产生正确的结果,但由于我的数据集的大小,它需要几天才能完成。
请看下面的例子:
df1 <- data.frame( Col1 = c( "d1", "d2", "d3", "d1"),
Col2 = c( "n1", "n2", "n1", "n2" ))
df2 <- data.frame( Col1 = c( "d1", "d2" ), Col2 = c( "n1", "n2" ))
df1$Res <- "No"
df1.len <- nrow( df1 )
for ( i in 1:df1.len ){
if ( df1$Col1[i] %in% df2$Col1 &
df1$Col2[i] %in% df2$Col2 ){
df1$Res[i] <- "Yes"
}
}
df1
df2
输出:
df1 Col1 Col2 分辨率
1 d1 n1 是
2 d2 n2 是
3 d3 n1 否
4 d1 n2 是df2
Col1 Col2
1 d1 n1
2 d2 n2
如您所见,df2 中不存在 df1 的第 4 行,但仍标记为“是”。任何帮助将不胜感激。我过去几天一直在看 SO 和其他论坛,但没有运气。谢谢。
【问题讨论】:
-
应该很容易适应 here 的内容:“识别数据框 A 中不包含在数据框 B 中的记录”
标签: r