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

如何按id合并wave1-wave4列的非NA值?使用dplyr未成功

合并同一ID下多列非NA值的解决方案

针对你提出的需求,用dplyr可以快速实现,核心逻辑是按ID分组后,提取每列唯一的非NA值。

第一步:构造示例数据

先把你提供的示例数据转换成可运行的R代码:

library(dplyr)

df <- tibble(
  id = c(1,1,1,1,2,2),
  wave1 = c(12, NA, NA, NA, 67, NA),
  wave2 = c(NA, 32, NA, NA, NA, NA),
  wave3 = c(NA, NA, 45, NA, NA, NA),
  wave4 = c(NA, NA, NA, 84, NA, 54)
)

第二步:执行合并操作

通过分组+列遍历的方式完成数据合并:

result <- df %>%
  group_by(id) %>%
  summarize(across(wave1:wave4, ~ first(na.omit(.)))) %>%
  ungroup()

# 输出结果
print(result)

运行后会得到你期望的结果:

# A tibble: 2 × 5
     id wave1 wave2 wave3 wave4
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1    12    32    45    84
2     2    67    NA    NA    54

代码说明

  • group_by(id):将数据按ID分组,确保同一ID的行被归为一组处理
  • across(wave1:wave4, ~ first(na.omit(.))):对每个wave列执行操作:先用na.omit()移除NA值,再用first()取剩下的唯一非NA值;如果某列全是NA,会返回NA
  • ungroup():取消分组,让结果回到普通数据框格式

内容的提问来源于stack exchange,提问作者D. Fowler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:47:05