如何在dplyr中将变量指定值重编码为缺失值NA?
在dplyr中重编码非法值为NA的解决方案
没问题,既然你已经在使用dplyr的mutate()函数,我平时处理这类数据清洗场景时,常用下面几种简洁的方法,帮你把hrs_workperwk列中的-1、-2、99这几个非法值替换为缺失值NA:
方法1:使用case_when()(可读性强)
case_when()是dplyr中处理多条件判断的利器,逻辑清晰,后续看代码也能快速明白规则:
library(dplyr) # 原始数据框 have <- tibble( id = 1:9, married = c(1,1,1,0,1,0,0,0,1), hrs_workperwk = c(40,55,70,-1,99,-2,10,40,45) ) # 处理数据 want <- have %>% mutate(hrs_workperwk = case_when( hrs_workperwk %in% c(-1, -2, 99) ~ NA_real_, TRUE ~ hrs_workperwk ))
逻辑解释:当hrs_workperwk的值属于指定的非法值列表时,替换为NA_real_(因为这是数值型列,要用对应类型的NA),否则保留原始值。
方法2:使用replace()(更简洁)
如果追求代码的简洁性,replace()函数可以一步完成替换:
want <- have %>% mutate(hrs_workperwk = replace(hrs_workperwk, hrs_workperwk %in% c(-1, -2, 99), NA))
这个方法的逻辑是:指定要替换的向量、需要替换的位置(满足非法值条件的元素),以及替换后的值NA。
验证结果
处理后的want数据框会是这样的:
# A tibble: 9 × 3 id married hrs_workperwk <int> <dbl> <dbl> 1 1 1 40 2 2 1 55 3 3 1 70 4 4 0 NA 5 5 1 NA 6 6 0 NA 7 7 0 10 8 8 0 40 9 9 1 45
两种方法都能完美实现你的需求,你可以根据自己的代码风格选择~
内容的提问来源于stack exchange,提问作者J.Q
相关产品推荐
相关产品推荐

