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

R - change values if not found in list

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

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

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

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

UPDATE/EDIT:

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

验证时,它不会将值更改为 'Employed'
`%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 的评论之后,使用 df7$patient_employment 而不是 x,它应该可以工作。

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