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

R语言按组合并数据框行并填充缺失值问题

按分组填充缺失值并保留唯一行的解决方案

你需要按record_id和instance分组,每组仅保留一行并填充其他列的缺失值。当前使用fill的代码完成了缺失值填充,但没有对分组后的重复行去重,补充步骤即可实现需求。

原始数据

mydata <- data.frame(
  record_id = c(1,1,1,1,1),
  instance = c(1,2,3,4,1),
  off_h = c(1,NA,0,0,0),
  off_c = c(NA,NA,0,0,0),
  off_p = c(NA,1,1,1,1)
)

期望输出

record_id instance off_h off_c off_p
1         1        1     1     0     1
2         1        2     0     0     1
3         1        3     0     0     1
4         1        4     0     0     1

解决方法

方法1:填充后去重

先通过fill按分组双向填充缺失值,再用distinct保留每组的唯一行:

library(dplyr)
library(tidyr)

mydata %>%
  group_by(record_id, instance) %>%
  fill(off_h, off_c, off_p, .direction = "updown") %>%
  distinct(record_id, instance, .keep_all = TRUE)

方法2:分组聚合提取非缺失值

如果每组内的非缺失值是唯一的(同一分组下某列的非缺失值无冲突),可以直接对分组后的列提取非缺失值的第一个有效值:

mydata %>%
  group_by(record_id, instance) %>%
  summarise(
    across(c(off_h, off_c, off_p), ~first(na.omit(.x))),
    .groups = "drop"
  )

两种方法都能得到你想要的期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:10:07