R - 如果在列表中找不到,则更改值

问题描述

我正在处理一列就业数据。我想以以下值结束:

  • 失业
  • 退休
  • 个体经营者
  • 已禁用
  • 在职

我已经清理了所有值的所有不同迭代,除了已使用。我正在尝试制定一个声明,可以按照以下方式做一些事情:

如果不在此列表中,“失业 | 退休 | 自雇 | 残疾”将值更改为“受雇”。

我一直在尝试使用 %notin% 函数和 replace() 函数,但我遗漏了一些东西。任何为我指明正确方向的帮助将不胜感激。

更新/编辑:

我根据@Rui Barradas 的建议让代码可以工作,但是在清理和标记代码时,我破坏了一些东西,我一生都无法弄清楚我做错了什么。下面的代码不会引发错误,但当我使用 table(df7$patient_employment)

进行验证时,它不会将值更改为“已雇用”
`%notin%` <- Negate(`%in%`)
x <- c(df7$patient_employment,"Unemployed","Retired","Self-Employed","disabled")
x[x %notin% df7$patient_employment] <- "Employed"

解决

经过一些额外的帮助后,有人指出我使用了示例中的 x,而我本应使用我的数据名称在这方面工作太久了。是时候伸展我的腿了。谢谢@Rui Barradas

解决方法

看看下面的答案是否能回答问题。

`%notin%` <- Negate(`%in%`)

set.seed(2020)
status <- c("Unemployed","Retired","Self-Employed","Disabled")
x <- sample(c(status,"Employed","ABC"),20,TRUE)

i <- x %notin% status
x[i]
#[1] "ABC"      "ABC"      "Employed" "ABC"      "Employed"
#[6] "Employed"

x[i] <- "Employed"
x[i]
#[1] "Employed" "Employed" "Employed" "Employed" "Employed"
#[6] "Employed"

上面的代码很简单,不需要逻辑索引向量i。创建此向量是为了使代码更具可读性,但以下代码与上面的代码等效。

x[x %notin% status] <- "Employed"

在 OP 的评论之后,使用 x 而不是 df7$patient_employment,它应该可以工作。

df7$patient_employment[df7$patient_employment %notin% c("Unemployed","Disabled")] <- "Employed"