删除另一个数据框中存在的行?

时间:2013-06-27 08:33:49

标签: r dataframe duplicate-removal delete-row corresponding-records

我有以下两个数据框(示例):

DF1:

name    profile    type    strand
A       4.5        1       +
B       3.2        1       +
C       5.5        1       +
D       14.0       1       -
E       45.1       1       -
F       32.8       1       -
G       19.9       1       +

DF2:

name
A
B
C
G

我想删除df1中为df1$name = df2$name获取以下内容的行:

输出:

name    profile    type    strand
D       14.0       1       -
E       45.1       1       -
F       32.8       1       -

如果有人能告诉我使用哪一段代码会有很多帮助,起初看起来很简单,但是从昨天开始我一直在弄乱它。

3 个答案:

答案 0 :(得分:37)

您需要%in%运算符。所以,

df1[!(df1$name %in% df2$name),]

应该给你你想要的东西。

  • df1$name %in% df2$name测试df1$name中的值是否在df2$name
  • !运算符会反转结果。

答案 1 :(得分:23)

有时称为反加入

library(dplyr)
anti_join(df1, df2, by = "name")

答案 2 :(得分:1)

df1[!(as.character(df1$jobId) %in% as.character(df2$name)), ]

我必须将as.character添加到我的执行中,因为name不是字符而是一个因素。 Isn' t %in%应该直接转换它吗?