如何在R的data.table中对每行≤2个连续NA执行线性插值
实现方法
你可以借助zoo包的na.approx函数自带的连续NA长度控制参数实现,效率很高,无需自己写判断逻辑:
依赖加载
library(data.table) library(zoo)
核心处理代码
# 提取需要插值的数值年份列 num_cols <- as.character(2018:2022) # 按行执行条件插值:连续NA≤2才插,超过2个保留原NA df1[, (num_cols) := transpose(lapply(transpose(.SD), function(x) { round(na.approx(x, maxgap = 2, na.rm = FALSE), 1) })), .SDcols = num_cols]
代码说明
na.approx的maxgap = 2参数刚好匹配需求:仅填充长度≤2的连续NA段,3个及以上的连续NA会保留原值不处理- 两次
transpose适配data.table的列向计算逻辑,比逐行循环效率高很多,适合处理大样本数据集 - 外层加
round是为了匹配示例的小数位精度,不需要可以直接去掉
内容的提问来源于stack exchange,提问作者fjurt
相关产品推荐
相关产品推荐

