如何在R语言中按指定模式填充数据框x1列的缺失值?
解决方案
首先需要注意:你的样本数据中x1列的"NA"是字符串类型,并非R原生的缺失值NA,第一步需先将其转换为真正的缺失值并转为数值型:
# 转换字符型"NA"为缺失值,并转为数值列 g$x1 <- as.numeric(g$x1)
针对大型数据集,推荐使用向量化操作提升效率,以下提供两种实现方式:
方法一:使用dplyr(tidyverse生态)
借助lag()函数获取前一行值,通过case_when()按规则填充:
library(dplyr) g_filled <- g %>% mutate(x1 = case_when( # 前一行是2018时,当前缺失值填2017 is.na(x1) & lag(x1) == 2018 ~ 2017, # 前一行是2016时,当前缺失值填2018 is.na(x1) & lag(x1) == 2016 ~ 2018, # 非缺失值保持原样 TRUE ~ x1 ))
方法二:Base R(无需额外包)
通过定位缺失值位置,结合循环填充(若数据集极大,效率略低于向量化方法):
# 定位x1列的缺失值位置 na_positions <- which(is.na(g$x1)) # 遍历缺失值位置,按规则填充 for (pos in na_positions) { prev_value <- g$x1[pos - 1] if (prev_value == 2018) { g$x1[pos] <- 2017 } else if (prev_value == 2016) { g$x1[pos] <- 2018 } }
执行后得到的结果与你期望的数据集完全一致。
内容的提问来源于stack exchange,提问作者musa isah
相关产品推荐
相关产品推荐

