如何编写R代码自动移除data.frame中gender与PID重复的行?
R语言移除gender和PID均重复的行解决方案
先看你的原始数据集:
df = data.frame(ID = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20), gender= c(1,2,1,2,2,2,2,1,1,2,1,2,1,2,2,2,2,1,1,2), PID = c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10))
针对数据量超1000行的场景,以下两种高效自动的解决方案都适用:
方法一:使用base R原生函数处理
无需额外安装包,原生支持大数据快速处理:
# 筛选出gender和PID组合不重复的行,保留每组首次出现的记录 df_cleaned <- df[!duplicated(df[c("gender", "PID")]), ]
逻辑说明:duplicated(df[c("gender", "PID")])会生成逻辑向量,标记出所有gender+PID组合重复的行(重复行返回TRUE),取反后即可筛选出唯一组合的行。
方法二:使用dplyr包的tidy语法
如果习惯tidyverse风格,代码可读性更强:
# 未安装dplyr则先执行安装命令:install.packages("dplyr") library(dplyr) # 按gender和PID去重,保留所有原始列,保留每组首次出现的行 df_cleaned <- df %>% distinct(gender, PID, .keep_all = TRUE)
逻辑说明:distinct()默认仅保留去重后的指定列,添加.keep_all = TRUE参数可以完整保留原始数据集的所有列,自动移除gender和PID均重复的冗余行。
验证效果:运行后查看df_cleaned,比如原始数据中ID5、6的gender和PID完全相同,会仅保留ID5的行;ID15、16的gender+PID组合重复,会仅保留ID15的行,符合去重需求。
内容的提问来源于stack exchange,提问作者Unknownuser
相关产品推荐
相关产品推荐

