根据跨多列的匹配行值对数据框进行子设置

时间:2018-07-24 21:25:41

标签: r match subset

我似乎在任何地方都找不到我需要的答案,因此,如果这是重复的,我深表歉意。

假设我有以下df

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

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

1 个答案:

答案 0 :(得分: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

也可以按操作对一组分组进行操作,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)]