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

如何在R语言中将多行对角数据合并为单行?

嘿,这问题我熟!要把这种分组后分散在多行的非NA值合并成单行,有好几种简单的方法,我给你一一演示~

首先先确认下你的原始数据集:

dataset1 <- data.frame( 
  id1 = c(1, 1, 1, 2, 2, 2), 
  id2 = c(122, 122, 122, 133, 133, 133), 
  num1 = c(1, NA, NA, 50,NA, NA), 
  num2 = c(NA, 2, NA, NA, 45, NA), 
  num3 = c(NA, NA, 3, NA, NA, 4) 
)

方法1:用dplyr(tidyverse风格,最常用)

如果你平时用tidyverse工具链,这个方法最直观:

library(dplyr)

merged_data <- dataset1 %>%
  # 按id1和id2分组
  group_by(id1, id2) %>%
  # 对每个num列提取非NA值(每组只有1个有效数据)
  summarize(
    num1 = first(na.omit(num1)),
    num2 = first(na.omit(num2)),
    num3 = first(na.omit(num3)),
    # 取消分组状态,避免后续操作报错
    .groups = "drop"
  )

print(merged_data)

方法2:用data.table(大数据量首选,速度更快)

如果你的数据集很大,data.table的效率会更高:

library(data.table)

# 把data.frame转成data.table
setDT(dataset1)

merged_data <- dataset1[, .(
  num1 = first(na.omit(num1)),
  num2 = first(na.omit(num2)),
  num3 = first(na.omit(num3))
), by = .(id1, id2)] # 按id1和id2分组

print(merged_data)

方法3:基础R(不用加载任何包)

不想额外装包的话,用基础R的aggregate函数就能搞定:

merged_data <- aggregate(. ~ id1 + id2, data = dataset1, FUN = function(x) x[!is.na(x)])

print(merged_data)

不管用哪种方法,最终输出结果都是你想要的:

id1 id2 num1 num2 num3
1   1 122    1    2    3
2   2 133   50   45    4

内容的提问来源于stack exchange,提问作者Bikram Adhitya Adhikari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:19:17