You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R数据框去重保留首行+基于ID合并数据框保证行唯一

嘿,这两个问题都是数据处理里的高频需求,我来给你分享几个实用的解决方案:

问题1:在R的dataframe中删除重复行并保留首行

这事儿我平时用两种方法最多,看你习惯用base R还是tidyverse工具链:

  • Base R 原生方法:
    用duplicated()函数就行,它会返回一个逻辑向量,标记出除了首次出现之外的重复行。我们取这个向量的反值,就能筛选出只保留首行的无重复数据框:

    # 针对整行重复的情况
    df_clean <- df[!duplicated(df), ]
    
    # 如果只需要按某一列(比如ID)判断重复,就指定列名
    df_clean <- df[!duplicated(df$ID), ]
    
  • Tidyverse 方法(推荐,代码更易读):
    用dplyr包的distinct()函数,默认就会保留首次出现的行,加上.keep_all = TRUE还能保留所有列的信息:

    library(dplyr)
    
    # 整行去重,保留首行
    df_clean <- df %>% distinct(.keep_all = TRUE)
    
    # 按指定列(比如ID)去重,保留首行的完整数据
    df_clean <- df %>% distinct(ID, .keep_all = TRUE)
    
问题2:合并DF1和DF2为New_Data,基于ID列保证每行唯一

这里得分两种常见场景,先明确你的需求是哪种:

场景1:把两个数据框的行合并到一起,最终每个ID只出现一次

也就是先把DF1和DF2的所有行堆叠起来,再基于ID去重保留首行,用这两种方法:

  • Tidyverse 简洁版:

    library(dplyr)
    
    # 先合并所有行,再按ID去重保留首行
    New_Data <- bind_rows(DF1, DF2) %>% 
      distinct(ID, .keep_all = TRUE)
    
  • Base R 原生版:

    # 先合并行
    combined_df <- rbind(DF1, DF2)
    # 基于ID去重,保留首行
    New_Data <- combined_df[!duplicated(combined_df$ID), ]
    

场景2:按ID列进行列合并(把两个数据框的列整合,匹配相同ID)

这种情况需要先确保每个数据框自身的ID是唯一的,再合并,避免出现重复ID的行:

# 先分别对DF1和DF2按ID去重(保留首行)
DF1_unique <- DF1[!duplicated(DF1$ID), ]
DF2_unique <- DF2[!duplicated(DF2$ID), ]

# 合并数据框,all=TRUE会保留所有ID(不管在哪个数据框里),你可以根据需求换成all.x或all.y
New_Data <- merge(DF1_unique, DF2_unique, by = "ID", all = TRUE)

内容的提问来源于stack exchange,提问作者Rahul shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:24:10