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

如何在R中合并相同ID的行?求助解决合并未达预期问题

合并R中重复ID的DataFrame行

根据你的需求,这里提供几种针对不同场景的解决方案:

场景1:同一ID下的列值为互补空值(合并后保留非空值)

如果你的DataFrame中同一ID的不同行,列值是互补的(即同一列下该ID只有一个非空值),可以用以下代码实现合并:

# 加载依赖包
library(dplyr)
library(tidyr)

# 按ID分组,保留每组非空的第一个值
merged_df <- df %>%
  group_by(ID) %>%
  summarise(across(everything(), ~ first(na.omit(.))))

如果同一ID下某列存在多个非空值,需要将它们拼接成字符串,可把first(na.omit(.))替换为paste(na.omit(.), collapse = ",")。

场景2:数值列聚合+字符列保留非空值

如果需要对数值列做求和/均值等聚合,同时对字符列保留非空值:

merged_df <- df %>%
  group_by(ID) %>%
  summarise(
    # 数值列求和(忽略空值),可替换为mean、max等
    across(where(is.numeric), ~ sum(., na.rm = TRUE)),
    # 字符列保留第一个非空值
    across(where(is.character), ~ first(na.omit(.)))
  )

大数据量场景(高效处理)

如果你的DataFrame行数很多,用data.table包效率更高:

library(data.table)
setDT(df)
merged_df <- df[, lapply(.SD, function(x) first(na.omit(x))), by = ID]

注意事项

  • 确保ID是用于分组的正确列名,若你的ID列名不是ID,请替换为实际列名
  • 如果之前的代码未达预期,大概率是聚合逻辑不符合需求,比如误用了求和而非空值填充,可根据实际列值情况调整聚合函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:20:19