如何针对指定行(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
相关产品推荐
相关产品推荐

