基于r中的两个列选择重复项

基于r中的两个列选择重复项,r,dataframe,R,Dataframe,我有这个档案: Animal birth a 2015-09-25 a NA b 2015-08-26 b 2015-08-26 e 2015-10-18 e NA d 2015-06-15 d 2015-06-15 我需要的动物和出生都像这样: Animal birth b 2015-08-26 b 2015-08-26 d 2015-06-15 d 2015-06-15

我有这个档案:

Animal   birth
a     2015-09-25
a         NA
b     2015-08-26
b     2015-08-26
e     2015-10-18  
e        NA
d     2015-06-15
d     2015-06-15
我需要的动物和出生都像这样:

Animal   birth
b     2015-08-26
b     2015-08-26
d     2015-06-15
d     2015-06-15
我尝试了以下代码:

new.dt= dt[(duplicated(dt$Animal) | duplicated(dt$Animal, fromLast = TRUE)) & (duplicated(dt$birth) & !is.na(dt$birth) | duplicated(dt$birth, fromLast = TRUE) & !is.na(dt$birth)), ]
我得到了这个:

Animal   birth
    a     2015-09-25
    b     2015-08-26
    b     2015-08-26
    e     2015-10-18  
    d     2015-06-15
    d     2015-06-15

我们可以按“动物”、“出生”和
筛选
对超过1个元素的组进行分组

library(dplyr)
dt %>%
    na.omit %>% 
    group_by(Animal, birth) %>% 
    filter(n() >1)

我们可以按“动物”、“出生”和
筛选
对超过1个元素的组进行分组

library(dplyr)
dt %>%
    na.omit %>% 
    group_by(Animal, birth) %>% 
    filter(n() >1)

如果对完整的数据帧使用
复制的
,则您的方法有效。如果您想忽略其他列,您可以在
duplicated
中使用
dt[,c('Animal','birth')]

dt[duplicated(dt) | duplicated(dt, fromLast = TRUE)]
#    Animal      birth
# 1:      b 2015-08-26
# 2:      b 2015-08-26
# 3:      d 2015-06-15
# 4:      d 2015-06-15

如果对完整的数据帧使用
复制的
,则您的方法有效。如果您想忽略其他列,您可以在
duplicated
中使用
dt[,c('Animal','birth')]

dt[duplicated(dt) | duplicated(dt, fromLast = TRUE)]
#    Animal      birth
# 1:      b 2015-08-26
# 2:      b 2015-08-26
# 3:      d 2015-06-15
# 4:      d 2015-06-15

你是最棒的……)你是最棒的……)