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

如何合并重复ID的行:用非NA值填充NA,保留共同非NA值

解决方案

可以使用dplyr包的分组汇总功能实现需求,核心逻辑是按id分组后,对每一列提取第一个非NA值(满足"保留任意非NA值"的要求),以此合并行并填充缺失值:

library(tidyverse)

# 原始数据
data <- tribble(~id, ~othervar, ~it_1, ~it_2, ~it_3, ~it_4, ~it_5, ~it_6,
              "k01", "lum", "a", "b", "c", "a", NA, NA,
              "k01", "lum", NA, NA, NA, NA, "a", "d",
              "k02", "nar", "a", "b", "c", "b", NA, NA,
              "k03", "lum", "a", "b", "a", "c", NA, NA,
              "k03", "lum", "b", "b", "a", NA, "d", "e")

# 合并重复ID的行
merged_data <- data %>%
  group_by(id) %>%
  # 对所有列取第一个非NA值,冲突时保留首个出现的非NA值
  summarize(across(everything(), ~first(na.omit(.)))) %>%
  ungroup()

# 查看结果
print(merged_data)

运行后得到的结果与预期一致:

# A tibble: 3 × 8
  id    othervar it_1 it_2 it_3 it_4 it_5 it_6
  <chr> <chr>    <chr><chr><chr><chr><chr><chr>
1 k01   lum      a    b    c    a    a    d   
2 k02   nar      a    b    c    b    NA   NA  
3 k03   lum      a    b    a    c    d    e   

关键步骤说明

  • group_by(id):按id将数据分组,确保同一ID的行被归为一组
  • across(everything(), ~first(na.omit(.))):对所有列执行操作,na.omit(.)移除列中的NA值,first()取剩余值的第一个(若有多组非NA值,保留首个出现的,符合"保留任意一个"的要求)
  • ungroup():取消分组,恢复常规数据框结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:10:43