R语言中如何为dataframe编写筛选器删除重复数据仅保留唯一值
R实现单列重复值替换为NA需求
这个需求完全可以实现,核心思路是对数据框的每一列单独判断,标记出所有出现次数≥2的数值,将对应位置替换为NA即可。
基础R实现(无需额外安装包)
# 构造原始数据框 question <- data.frame( "cars" = c(1,1,2,2,34), "bike" = c(1,1,2,2,37), "motorcycle" = c(3,3,2,2,45), "trycicle" = c(3,3,4,4,56), "skate" = c(1,1,4,4,78) ) # 按列处理:重复值替换为NA,仅保留唯一值 question2 <- as.data.frame(lapply(question, function(x) { # 标记所有出现过至少两次的元素位置 x[duplicated(x) | duplicated(x, fromLast = TRUE)] <- NA return(x) })) # 输出验证 print(question2)
tidyverse/dplyr 实现
如果你习惯使用tidyverse生态,可以用across批量处理所有列:
library(dplyr) question2 <- question %>% mutate(across(everything(), ~ ifelse(duplicated(.) | duplicated(., fromLast = TRUE), NA, .)))
运行上述任意一段代码,得到的question2都和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Enzo De Gaspari Ramos
相关产品推荐
相关产品推荐

