我似乎在任何地方都找不到我需要的答案,因此,如果这是重复的,我深表歉意。
假设我有以下df
:
a b c d
1 2 3 4
2 1 2 3
1 2 4 4
我想对我的df进行子集处理,以便在新数据框中返回基于“ a”,“ b”和“ d”列的匹配行。
答案 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)]