如何在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
相关产品推荐
相关产品推荐

