R语言基于其他变量条件填充occupation列缺失值的实现方法
R实现按行条件填充指定列缺失值
需求说明
- 数据集
occupation(职业)列存在缺失值,已构建is_working字段标识在职状态:取值0代表非在职,1代表在职 - 填充规则:仅当同一行
is_working取值为0时,将对应位置occupation的缺失值填充为0;其余位置的occupation缺失值保留原始缺失状态,不做处理
测试用示例数据
可直接运行以下代码生成测试数据框,用于验证填充逻辑效果:
df <- data.frame ( occupation = c("NA","NA","Drivers","Accountants","NA","Drivers","Laborers","Cleaning staff","Drivers","Drivers"), is_working = c("1","0","1","1","1","1","1","1","1","1") )
注意事项
上述测试数据里的缺失值是字符串格式的"NA",不是R语言原生的逻辑缺失值NA,正式处理前建议先做类型转换,否则会出现缺失值匹配失败的问题。
实现代码
方法1:Base R 原生实现(无需加载第三方包)
# 字符串NA转原生NA,若你的实际数据集已经是原生NA格式可跳过此步骤 df$occupation[df$occupation == "NA"] <- NA # 按规则执行条件填充 df$occupation[is.na(df$occupation) & df$is_working == "0"] <- "0"
方法2:dplyr 流水线实现(适配tidyverse生态工作流)
library(dplyr) df <- df %>% mutate( # 字符串NA转原生NA,已处理可跳过 occupation = na_if(occupation, "NA"), # 按规则执行条件填充 occupation = ifelse( is.na(occupation) & is_working == "0", "0", occupation ) )
效果说明
代码运行后,测试数据中is_working为0的第二行职业缺失值会被填充为"0",其余行(第一行、第五行)的职业缺失值会保持缺失状态,完全匹配需求。如果你的is_working列是数值类型而非字符类型,把判断条件里的"0"改为数值型0即可,避免因数据类型不匹配导致判断逻辑失效。
内容的提问来源于stack exchange,提问作者tara
相关产品推荐
相关产品推荐

