问题描述
我正在处理一列就业数据。我想以以下值结束:
- 失业
- 退休
- 个体经营者
- 已禁用
- 在职
我已经清理了所有值的所有不同迭代,除了已使用。我正在尝试制定一个声明,可以按照以下方式做一些事情:
如果不在此列表中,“失业 | 退休 | 自雇 | 残疾”将值更改为“受雇”。
我一直在尝试使用 %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"