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

如何针对指定行(2001年)用前后行均值填充缺失值?

解决方案:批量填充特定行的缺失值

首先重现你的示例数据:

df = data.frame(year = c(2000, 2001, 2002),
                A = c(2, NA, 3),
                B = c(2, 2, 3),
                C = c(3, NA, 2))

要批量处理所有含缺失值的列,仅对2001年行的NA用前后行平均值填充,可以用dplyr包的across函数结合case_when实现,代码如下:

library(dplyr)

# 批量处理并生成填充后的数据集
df_filled <- df %>%
  mutate(across(-year, ~ case_when(
    # 仅对2001年行的NA值进行填充
    year == 2001 & is.na(.) ~ (lag(.) + lead(.)) / 2,
    # 其他情况保持原数值
    TRUE ~ .
  )))

代码说明:

  • across(-year):指定处理除year外的所有列;如果需要筛选特定类型的列(比如仅数值列),可以替换为across(where(is.numeric))。
  • case_when的条件逻辑:仅当当前行是2001年且值为NA时,用该行的前一行(lag(.))和后一行(lead(.))的平均值填充,其余情况保留原始值。

运行后得到的结果:

> df_filled
  year   A B   C
1 2000 2.0 2 3.0
2 2001 2.5 2 2.5
3 2002 3.0 3 2.0

如果需要直接修改原数据框,只需将结果赋值回原变量:

df <- df %>%
  mutate(across(-year, ~ case_when(
    year == 2001 & is.na(.) ~ (lag(.) + lead(.)) / 2,
    TRUE ~ .
  )))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:05:28