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

使用dt_fill填充data.table指定列NA时出错,求排查解决

问题分析与修正方案

错误原因

你遇到的错误核心是**dt_fill的参数使用逻辑错误**:

  • dt_fill的第二个参数需要传入列名字符向量,但你在lapply(.SD, function(x) ...)中传入的x是列的实际值(向量),而非列名。dt_fill会把这个x当作列名去查找,自然找不到对应列,触发报错。
  • 同时你在dt_fill中重复传入整个原始表dt,这在data.table的列操作逻辑里是冗余且容易引发混乱的。

修正代码

情况1:不按分组填充

直接用dt_fill一次性处理指定列,无需嵌套lapply(.SD):

library(data.table)
library(tidyfast)

x = 1:10
dt = data.table(v1 = x,
                v2 = shift(x),
                v3 = shift(x, -1L),
                v4 = sample(c(rep(NA, 10), x), 10),
                grp = sample(1:3, 10, replace = TRUE))

cols <- colnames(dt)[2:4]

# 直接填充指定列
dt_fill(dt, cols, .direction = "down")

情况2:按grp分组填充

如果需要按分组填充缺失值,直接用dt_fill的by参数即可,无需手动分组:

# 按grp分组填充指定列
dt_fill(dt, cols, .direction = "down", by = grp)

或者用data.table原生分组语法配合dt_fill:

dt[, (cols) := lapply(cols, function(col) {
  dt_fill(.SD, col, .direction = "down")[[col]]
}), .SDcols = cols, by = grp]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:01:08