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

如何在data.table中按分组用组内首个非重复有效值填充NA值

用data.table分组填充NA为分组内第一个唯一有效值的方法

这里有一个简洁的data.table解决方案,完全匹配你的需求:

library(data.table)

# 你的原始数据
k <- data.table(name = rep(letters[1:4], each = 5), 
                year = rep(2015:2019, times = 4), 
                values = c(19, 19, 18, NA, 19, 44, NA, NA, NA, NA, 33, 32, NA, NA, NA, NA, NA, NA, NA, NA))

# 核心填充逻辑
k[, values := ifelse(is.na(values), unique(na.omit(values))[1], values), by = name]

# 查看处理后的结果
print(k)

代码解释:

  • by = name:指定按name列进行分组,确保每个分组独立处理
  • unique(na.omit(values))[1]:
    1. na.omit(values):先剔除当前分组中的所有NA值
    2. unique(...):提取分组内非NA值的唯一值集合
    3. [1]:取这个唯一值集合的第一个元素,作为填充NA的基准值;如果分组内全是NA,这个表达式会返回NA,刚好保持原数据不变
  • ifelse(is.na(values), ..., values):判断当前values是否为NA,是则用基准值替换,否则保留原数值

运行后得到的结果完全符合你期望的输出:

name year values
 1:    a 2015     19
 2:    a 2016     19
 3:    a 2017     18
 4:    a 2018     19
 5:    a 2019     19
 6:    b 2015     44
 7:    b 2016     44
 8:    b 2017     44
 9:    b 2018     44
10:    b 2019     44
11:    c 2015     33
12:    c 2016     32
13:    c 2017     33
14:    c 2018     33
15:    c 2019     33
16:    d 2015     NA
17:    d 2016     NA
18:    d 2017     NA
19:    d 2018     NA
20:    d 2019     NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:32:27