使用样本数据
> df1 <- data.frame(x=c(1,1,2,3), y=c("a","b","a","b"))
> df1
x y
1 1 a
2 1 b
3 2 a
4 3 b
> df2 <- data.frame(x=c(1,3), y=c("a","b"))
> df2
x y
1 1 a
2 3 b
我想从df1中删除df2的所有值对(x,y)。我可以在df2中使用for循环遍历每一行,但我确信有一种更好更简单的方法,我现在想不到。我一直试图做一些从以下开始的事情:
> df1$x %in% df2$x & df1$y %in% df2$y
[1] TRUE TRUE FALSE TRUE
但这不是我想要的,因为df1 [2,] =(1,b)被拉出去除。非常感谢您的帮助。
答案 0 :(得分:4)
从df2:
构建一组对prs <- with(df2, paste(x,y,sep="."))
使用类似的成对过程来测试df1中的每一行:
df1[ paste(df1$x, df1$y, sep=".") %in% prs , ]
答案 1 :(得分:1)
您可以反过来:rbind
所有内容并删除重复项
out <-rbind(df1,df2)
out[!duplicated(out, fromLast=TRUE) & !duplicated(out),]
x y
2 1 b
3 2 a