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

如何在R中将不同分组的观测值合并到同一行?

R语言数据整合:合并同一x对应的多列非NA值

方法一:dplyr分组汇总

利用dplyr的分组功能,对每个x组内的各y_列提取唯一的非NA值:

library(dplyr)

result <- ydata %>%
  group_by(x) %>%
  summarize(across(starts_with("y_"), ~ first(na.omit(.)))) %>%
  ungroup()
  • starts_with("y_")自动匹配所有以y_开头的列(y_a至y_h)
  • na.omit(.)移除列中的NA值,first()取剩余的唯一有效值(每组每列仅一个非NA值)

方法二:tidyr重塑数据

先将宽格式数据转长格式(丢弃NA),再转回宽格式实现整合:

library(tidyr)
library(dplyr)

result <- ydata %>%
  pivot_longer(cols = starts_with("y_"), names_to = "y_type", values_to = "value", values_drop_na = TRUE) %>%
  pivot_wider(names_from = y_type, values_from = value)

方法三:Base R原生实现

无需加载扩展包,用aggregate函数完成分组提取:

result <- aggregate(. ~ x, data = ydata[, !names(ydata) %in% "type"], FUN = function(x) x[!is.na(x)])

示例验证

构造你的示例数据测试:

ydata <- data.frame(
  x = c(1,2,3,1,2,3,1,2,3),
  type = c(1,1,1,2,2,2,3,3,3),
  y_a = c(1.3,2.7,4.4,NA,NA,NA,NA,NA,NA),
  y_b = c(NA,NA,NA,2.2,3.3,4.4,NA,NA,NA),
  y_c = c(NA,NA,NA,NA,NA,NA,3.3,7.6,11.3)
)

# 运行任意一种方法后查看结果
print(result)
#>   x y_a y_b  y_c
#> 1 1 1.3 2.2  3.3
#> 2 2 2.7 3.3  7.6
#> 3 3 4.4 4.4 11.3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:01:07