R - 根据变量删除重复行,但忽略 NA 和一些特定值

  • 本文关键字:NA 变量 删除 r
  • 更新时间 :
  • 英文 :


我有一个数据框架,我需要根据变量"e-mail"删除重复项。然而,这里有很多我无法去掉的NA,因为它们是有价值的观察。除了NA之外,有人碰巧在上面加了一个点,所以我想知道我是否可以去掉重复的电子邮件行,而忽略NA和带有";关于电子邮件

我试过distinct()n_distinct(),但这两个都没有na。rm选项。

下面是我的意思的一个例子:

library(dplyr)
email <- c("xxx@xxx.xxx","xxx@xxx.xxx","yyy@yyy.yyy","yyy@yyy.yyy","zzz@zzz.zzz","zzz@zzz.zzz",".",".",".",".",".")
names <- c("Gabriel","Marcos","Julio","Rafael","Victor","Azymov","Turkey Sandvich","Marzia","Door","Cato","Doggo")
test <- data.frame(email,names)
morenames <- c("Soap","Redbull","World of Warcraft")
moreemails <- c(NA,NA,NA)
test2 <- data.frame(moreemails, morenames)
names(test2) <- c("email","names")
test <- test %>% rbind(test2)
test
verif_dup <- test[duplicated(test[,1]),]
verif_dup

我可以在verif_dup上看到所有重复的邮件。我想要一种方法来删除重复的xxx@xxx.xxx, yyy@yyy.yyy和zzz@zzz.zzz,但保留";和NA。

不幸的是,我想不出一种优雅的方法来一步完成这个任务。我将操作拆分为一个数据框架,用于隔离NA和";和另一个用于重复。

test_missing <- test %>%
filter(is.na(email) | email == '.')
# here I assume you keep the first row of the duplicated values (the 'names' column is different for each)
test_duprm <- test %>%
filter(!is.na(email) & email != '.') %>%
group_by(email) %>%
filter(row_number() == 1)
bind_rows(test_missing, test_duprm)

最新更新