我有以下两个数据框(示例):
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 -
如果有人能告诉我使用哪一段代码会有很多帮助,起初看起来很简单,但是从昨天开始我一直在弄乱它。
答案 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%
应该直接转换它吗?