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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:41:38