删除另一个数据框中存在的行? [复制]

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

我想删除df1df1$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 基于另一个类似的数据框添加或删除数据框中的行

根据来自不同数据帧的行名将列从另一个数据帧复制到

删除另一个数据框中的行[重复]

如何使用 pyspark 2.1.0 选择另一个数据框中不存在的行?

如何通过特定的 ID 号删除数据框中的行? [复制]

从另一个数据框中删除包含相同日期的行-python-大熊猫