【问题标题】: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       -

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

【问题讨论】:

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


    【解决方案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%不应该直接转换吗?

      【讨论】:

        猜你喜欢
        • 2014-08-21
        • 2021-04-27
        • 2016-01-07
        • 1970-01-01
        • 1970-01-01
        • 2019-11-03
        • 1970-01-01
        相关资源
        最近更新 更多