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

如何在R中用相邻已知值的统一平均值填充数据列内的NA值

R实现固定间隔NA统一替换为相邻实测值均值

需求说明

数据集每两个实测值之间固定间隔10个NA,要求所有中间NA统一替换为前后两个实测值的平均值,而非线性渐变插值。

实现代码

# 未安装依赖包先运行:install.packages(c("dplyr", "tidyr"))
library(dplyr)

# 读入示例原始数据
rc_data <- structure(list(sample_id = c("REFTTO_IS_211201_1_b", "ARL2108200_b",
"ARL2108201_b", "ARL2108202_b", "ARL2108203_b", "ARL2108204_b",
"ARL2108205_b", "ARL2108206_b", "ARL2108207_b", "ARL2108208_b",
"ARL2108209_b", "REFTTO_IS_211201_2", "ARL2108210_b", "ARL2108211_b",
"ARL2108212_b", "ARL2108213_b", "ARL2108214_b", "ARL2108215_b",
"ARL2108216_b", "ARL2108217_b", "ARL2108218_b", "ARL2108219_b",
"REFTTO_IS_211201_3", "REFTTO_IS_211203_1", "ARL2108220", "ARL2108221",
"ARL2108222", "ARL2108223", "ARL2108224", "ARL2108225", "ARL2108226",
"ARL2108227", "ARL2108228", "ARL2108229", "REFTTO_IS_211203_2",
"ARL2108230", "ARL2108231", "ARL2108232", "ARL2108233", "ARL2108234",
"ARL2108235", "ARL2108236", "ARL2108237", "ARL2108238", "ARL2108239",
"REFTTO_IS_211203_3", "REFTTO_IS_211206_1", "ARL2108240", "ARL2108241",
"ARL2108242", "ARL2108243", "ARL2108244", "ARL2108245", "ARL2108246",
"ARL2108247", "ARL2108248", "ARL2108249", "REFTTO_IS_211206_2",
"ARL2108250", "ARL2108251", "ARL2108252", "ARL2108253", "ARL2108254",
"ARL2108255", "ARL2108256", "ARL2108258", "ARL2108259", "REFTTO_IS_211206_3"
), response_coefficient = c("1.09785865302384", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "1.09822862814289",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "1.09835314677401",
"1.09942926690693", "NA", "NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "1.10084276861106", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA", "NA", "1.10078178211056", "1.11104600880183",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "1.11203467893562",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "1.11344223852824"
)), class = "data.frame", row.names = c(NA, -68L))

# 第一步:将响应系数列转为数值型,把字符串"NA"转为真实缺失值
rc_data <- rc_data %>%
  mutate(response_coefficient = as.numeric(response_coefficient))

# 第二步:给每一段(实测值+后面10个NA)打分组标签
rc_data <- rc_data %>%
  mutate(group = cumsum(!is.na(response_coefficient)))

# 第三步:统一替换同组NA为首尾实测值均值
rc_result <- rc_data %>%
  group_by(group) %>%
  mutate(
    segment_avg = (first(response_coefficient) + lead(first(response_coefficient), 1))/2,
    response_coefficient_filled = ifelse(is.na(response_coefficient), segment_avg, response_coefficient)
  ) %>%
  ungroup() %>%
  select(-group, -segment_avg)

逻辑说明

  • 先按实测值的位置对数据分段,每一段包含1个实测值和后面紧接的10个NA
  • 每段统一计算首尾两个实测值的均值,整段所有NA都用该均值填充,完全满足同一段10个NA取值完全一致的要求
  • 原始实测值不会被修改,仅替换缺失值
  • 如果需要处理首尾超出实测值范围的NA,可自行调整lead参数补充首尾填充规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:00