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

R语言如何基于另一列分组批量填充dataframe目标列缺失值

按分组列填充另一列NA值的实现方案

场景说明

现有数据框结构示例如下,需要按input列的唯一值分组,将同组内n1列的NA值替换为该组下已存在的非空值,不使用硬编码指定分组取值,适配大体量数据处理需求。
初始测试数据:

df <- data.frame(input = c("Teline stenopetala", "Teline stenopetala", 
                           "Teline stenopetala", "Prunus lusitanica", "Prunus lusitanica"),
                 n1 = c("Genista stenopetala Webb & Berthel.", NA, NA, NA, "Prunus hixa Brouss ex. Willd."))

期望输出为同组所有n1值统一为该组对应的非空取值。

实现代码

1. tidyverse 写法(易读易维护,适配常规数据量)

通过dplyr分组后直接取组内第一个非空值覆盖整组,无需手动指定任何分组规则:

library(dplyr)

df <- df %>%
  group_by(input) %>%
  mutate(n1 = first(na.omit(n1))) %>%
  ungroup()

2. data.table 写法(性能优异,适配百万级以上大数据量)

大数据量场景下优先选择该写法,运行效率远高于常规tidyverse写法:

library(data.table)

setDT(df)
df[, n1 := na.omit(n1)[1], by = input]

注意事项

  • 上述代码默认每个input分组下n1列仅存在1种唯一非空取值,和示例场景完全匹配
  • 如果同组存在多个不同的非空n1值,代码默认取组内第一个出现的非空值填充,可根据实际业务需求调整组内取值逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:39:17