删除另一个数据框中存在的行? [复制]
Posted
技术标签:
【中文标题】删除另一个数据框中存在的行? [复制]【英文标题】:Delete rows that exist in another data frame? [duplicate] 【发布时间】:2013-06-24 16:11:44 【问题描述】:我有以下两个数据框(示例):
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 -
如果有人能告诉我要使用哪一段代码会很有帮助,起初看起来很简单,但我从昨天开始就搞砸了。
【问题讨论】:
【参考方案1】:您需要%in%
运算符。所以,
df1[!(df1$name %in% df2$name),]
应该给你你想要的。
df1$name %in% df2$name
测试df1$name
中的值是否在df2$name
!
运算符反转结果。
【讨论】:
非常感谢!你知道我应该怎么做才能使它对称吗?我注意到df1[!(df1$name %in% df2$name),]
和df2[!(df2$name %in% df1$name),]
给了我不同的结果...
这对我帮助很大。不确定我是否能找到 %in%
运算符。这不是一个真正可搜索的东西..【参考方案2】:
这有时被称为反加入:
library(dplyr)
anti_join(df1, df2, by = "name")
【讨论】:
【参考方案3】:df1[!(as.character(df1$jobId) %in% as.character(df2$name)), ]
我不得不将as.character
添加到我的执行中,因为name
不是一个字符,而是一个因素。 %in%
不应该直接转换吗?
【讨论】:
以上是关于删除另一个数据框中存在的行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark 基于另一个类似的数据框添加或删除数据框中的行