【问题标题】:subsetting a dataframe based on matching row values across multiple columns基于跨多列的匹配行值对数据框进行子集化
【发布时间】:2018-07-24 21:25:41
【问题描述】:

我似乎无法在任何地方找到我需要的答案,所以如果这是重复的,请道歉。

假设我有以下df

a    b    c    d  
1    2    3    4  
2    1    2    3  
1    2    4    4

我想对我的 df 进行子集化,以便在新数据框中返回基于“a”、“b”和“d”列的匹配行。

【问题讨论】:

    标签: r match subset


    【解决方案1】:

    我们可以在列的子集上使用duplicated 来返回逻辑vector 来过滤行

    df[duplicated(df[c('a', 'b', 'd')])|duplicated(df[c('a', 'b', 'd')], 
                    fromLast = TRUE),]
    #  a b c d
    #1 1 2 3 4
    #3 1 2 4 4
    

    也可以通过 group by 操作和 filter 那些超过 1 行的组来完成

    library(dplyr)
    df %>%
       group_by(a, b, d) %>%
       filter(n() > 1)
    

    data.table

    library(data.table)
    setDT(df)[, .SD[.N > 1], by = .(a, b, d)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2020-01-22
      相关资源
      最近更新 更多