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

如何在R中合并同一ID的行并去除NA,实现每行对应唯一ID?

在R中合并同一ID的互斥行数据

首先还原你的示例数据(额外添加字符类型列演示兼容性):

df <- data.frame(
  ID = c(1,1),
  a = c(1, NA),
  b = c(NA, 2),
  c = c(NA, 3),
  d = c("sample_text", NA) # 字符类型列
)

因为数据各行互斥(同一列下同一ID不会有多个非NA值),可以用以下两种方法合并为每个ID一行:

方法1:使用dplyr包(tidyverse风格)

library(dplyr)

df_combined <- df %>%
  group_by(ID) %>%
  summarise(across(everything(), ~first(na.omit(.)))) %>%
  ungroup()
  • group_by(ID):按ID分组
  • across(everything(), ~first(na.omit(.))):对每一列提取第一个非NA值(因数据互斥,每个组的列仅存在一个有效值)
  • ungroup():取消分组状态,返回标准数据框

方法2:使用base R(无需额外包)

df_combined <- aggregate(. ~ ID, data = df, FUN = function(x) na.omit(x)[1])
  • aggregate(. ~ ID):指定按ID分组,聚合所有其他列
  • 自定义函数function(x) na.omit(x)[1]:过滤每列的NA值后取第一个(也是唯一的)有效数据

两种方法都能保留列的原始数据类型(包括字符类型),且处理结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:23:18