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

R语言按多个ID字段分组合并数据框行值的解决方法

R数据框按指定字段分组合并行、整合非NA值实现方案

你原有代码的问题:funs(toString(na.omit(.)))会将列值转为字符串格式,且全NA列会返回空字符串而非保留NA,不符合数值保留、非NA值归并的需求。
从你给出的样例数据看,每个study_id + lab_study_dt + lab_study_time分组下,每个检验/检出限指标列最多存在1个非NA值,只需要分组后提取每列的首个非NA值即可得到目标结果。

dplyr 实现(适配新版dplyr语法)

library(dplyr)

result <- df %>%
  group_by(study_id, lab_study_dt, lab_study_time) %>%
  summarise(
    across(everything(), ~ first(na.omit(.))),
    .groups = "drop"
  )
  • 如果同组某列存在多个非NA值需要拼接展示,将first(na.omit(.))替换为paste(na.omit(.), collapse = ", ")即可,不会出现全NA列转空字符串的问题。

data.table 实现(适合百万行级大数据量场景,性能更优)

library(data.table)

setDT(df)
result <- df[, lapply(.SD, function(x) first(na.omit(x))),
             by = c("study_id", "lab_study_dt", "lab_study_time")]

注意事项

你给出的预期结果样例中lab_rbc_count值为1000,但原始样例数据中该分组下对应值为10000,属于手误偏差,上述代码会保留原始数据的真实值,如果你确实需要调整该值可在得到结果后单独做数值替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:54:26