R语言按email字段去重时如何保留NA与值为“.”的所有行?
R 实现指定条件去重的解决方案
两种实现思路,都可以满足你保留所有NA和.行、仅对有效邮箱去重的需求:
方法1:dplyr分组合并(逻辑清晰易调试)
核心思路是将数据集拆分为「需要去重的有效邮箱行」和「需全量保留的特殊值行」,分别处理后再拼接:
library(dplyr) result <- test %>% # 筛选出非NA、非.的有效邮箱行 filter(!is.na(email), email != ".") %>% # 按邮箱去重,.keep_all = TRUE保留所有列,默认保留首次出现的行 distinct(email, .keep_all = TRUE) %>% # 拼接回所有需保留的NA、.对应的行 bind_rows(test %>% filter(is.na(email) | email == "."))
方法2:基础R条件筛选(代码更简洁)
直接通过逻辑判断筛选需保留的行,仅删除有效邮箱且重复的行:
result <- test[!duplicated(test$email) | is.na(test$email) | test$email == ".", ]
逻辑说明:满足以下三个条件任意一个的行都会被保留:
- 对应邮箱是第一次出现
- 邮箱值为NA
- 邮箱值为
.
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

