根据NA有条件地删除重复项

时间:2019-07-25 15:41:27

标签: r duplicates unique

我有一个包含两列的df:SurveyIDSpecies

SurveyID=c(1,1,1,2,2,3,3,3)
Species=c(NA,NA,"GRSH",NA,NA,NA,"RAZO","RAZO")
df=data.frame(cbind(SurveyID,Species))

我想在两种情况下删除重复项: 1.删​​除所有具有相同survey IDNA Species的重复项 2.具有相同调查ID且混合使用NASpecies(例如“ RAZO”)的行仅通过删除带有NA {{1}的行来显示具有种类的行。 }。

产品df应该如下所示:

Species

我尝试了带有条件的子设置,但是这删除了重复的种类,并用df2=data.frame(cbind(SurveyID=c(1,2,3,3),Species=c("GRSH",NA,"RAZO","RAZO"))) SurveyID保留了不需要的重复的NA行。

Species

有什么建议吗?我也是新手,所以让我知道我的问题是否需要澄清/格式化!

2 个答案:

答案 0 :(得分:3)

一个选项是

file.txt

答案 1 :(得分:3)

您可以通过过滤所有非NA Species的值,然后联接到所有SurveyIDs的表中来做到这一点

library(data.table)
setDT(df)

df[!is.na(Species)
   ][df[, .(new = unique(SurveyID))], on = c('SurveyID' = 'new')]

#    SurveyID Species
# 1:        1    GRSH
# 2:        2    <NA>
# 3:        3    RAZO
# 4:        3    RAZO