R语言如何填充指定同值区间内的列缺失值,其余缺失值赋值为0?
R数据框区间值填充实现方案
需求场景
初始构造测试数据框代码如下:
df1 <- data.frame(time = 1:20, trial = c(NA, NA, NA, 1, NA, NA, NA, 1, NA, NA, NA, 2, NA, NA, NA, 2, NA, NA, NA, NA))
初始数据中trial列存在成对出现的数值1、2,其余为NA,需要实现:
- 两个取值为1的记录之间的所有
NA填充为1 - 两个取值为2的记录之间的所有
NA填充为2 - 剩余位置的
NA统一赋值为0
实现代码(Base R 无依赖版本)
该方法无需安装任何第三方R包,可直接运行。核心逻辑为遍历每个非空的trial值,定位该值首次和末次出现的行号,将闭区间内的所有行赋值为对应值,最后将剩余空值替换为0:
# 提取trial列所有非重复的非空值 target_vals <- unique(na.omit(df1$trial)) # 逐值填充对应区间 for (val in target_vals) { match_pos <- which(df1$trial == val) df1$trial[min(match_pos):max(match_pos)] <- val } # 剩余NA替换为0 df1$trial[is.na(df1$trial)] <- 0
输出结果
运行代码后得到的数据框完全匹配预期效果:
time trial 1 1 0 2 2 0 3 3 0 4 4 1 5 5 1 6 6 1 7 7 1 8 8 1 9 9 0 10 10 0 11 11 0 12 12 2 13 13 2 14 14 2 15 15 2 16 16 2 17 17 2 18 18 2 19 19 0 20 20 0
若数据中同一数值存在多组成对出现的场景,只需调整区间匹配逻辑,按相邻两个同值点划分区间逐段填充即可,当前代码适配示例中每类值恰好出现2次的场景。
内容的提问来源于stack exchange,提问作者Pierre
相关产品推荐
相关产品推荐

