【发布时间】: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”列的匹配行。
【问题讨论】:
我似乎无法在任何地方找到我需要的答案,所以如果这是重复的,请道歉。
假设我有以下df:
a b c d
1 2 3 4
2 1 2 3
1 2 4 4
我想对我的 df 进行子集化,以便在新数据框中返回基于“a”、“b”和“d”列的匹配行。
【问题讨论】:
我们可以在列的子集上使用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)]
【讨论】: