46

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

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

我想删除要获取以下内容的df1df1$name = df2$name

输出:

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

如果有人能告诉我使用哪一段代码会很有帮助,起初看起来很简单,但我从昨天开始就搞砸了。

4

3 回答 3

61

你需要%in%运营商。所以,

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

应该给你你想要的。

  • df1$name %in% df2$name测试中的值df1$name是否在df2$name
  • !运算符反转结果。
于 2013-06-27T08:37:24.717 回答
40

这有时被称为反连接

library(dplyr)
anti_join(df1, df2, by = "name")
于 2016-12-29T00:33:27.567 回答
3
df1[!(as.character(df1$jobId) %in% as.character(df2$name)), ]

我不得不增加as.character我的执行力,因为name它不是一个角色,而是一个因素。不%in%应该直接转换吗?

于 2016-12-28T23:34:00.350 回答