R中行的setdiff

mts*_*mts 3 r

对于两个数据帧df.1df.2,我想知道其中的行df.1不在 中df.2,即已消失或更改的行。这是示例:

df.1 = cbind.data.frame(a = 1:4, b = 2:5, c = 99:102)
> df.1
  a b   c
1 1 2  99
2 2 3 100
3 3 4 101
4 4 5 102

df.2 = cbind.data.frame(a = c(1:3,7), b = c(3,3:4,9), c=c(99:100, 102, 105))
> df.2
  a b   c
1 1 3  99
2 2 3 100
3 3 4 102
4 7 9 105
Run Code Online (Sandbox Code Playgroud)

所以这里我想要的输出是第 1,3 行和第 4 行df.1

> desired.output
  a b   c
1 1 2  99
3 3 4 101
4 4 5 102
Run Code Online (Sandbox Code Playgroud)

如果df.1df.2是向量,我可以使用setdiff(df.1, df.2),但我没有看到一种简单/优雅的方法将其应用于数据帧。

有没有比我想到的这些解决方法更优雅的东西:

  • df.1逐列比较df.2,然后从所有列中取并
  • 使数据帧成为所有行的列表,然后使用setdiff并转换回数据帧

She*_*hen 5

在dplyr中使用anti_join很方便。

library(dplyr)
anti_join(df.1,df.2)
Joining by: c("a", "b", "c")
  a b   c
1 1 2  99
2 4 5 102
3 3 4 101
Run Code Online (Sandbox Code Playgroud)