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

Posted

技术标签:

【中文标题】R - 如果在列表中找不到,则更改值【英文标题】:R - change values if not found in list 【发布时间】:2021-01-30 20:34:44 【问题描述】:

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

失业 退休 自雇人士 已禁用 受雇

我已经清理了所有值的所有不同迭代,除了就业。我正在尝试制定一个声明,该声明将执行以下操作:

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

我一直在尝试使用 %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

【问题讨论】:

dat$status[! dat$status %in% c("Unemployed", "Retired", "Self-Employed", "Disabled")] &lt;- "Employed"。 (将dat 替换为您的data.frame 名称,将status 替换为列名。)(如果这不起作用,请edit 您的问题并提供dput(head(dat)) 的输出。谢谢!)跨度> @r2evans 虽然我无法让它工作,但我相信这可能是由于我的经验不足,我感谢您抽出宝贵时间做出回应。我能够让它与不同的解决方案一起工作。谢谢 【参考方案1】:

看看以下是否回答了问题。

`%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"

【讨论】:

您能解释一下您关于不需要逻辑索引向量的评论吗?或者也许编辑您的评论以仅包含需要的内容?我认为这应该可以工作%notin%' &lt;- Negate(%in%) x &lt;- c(df7$patient_employment, "Unemployed", "Retired", "Self-Employed", "Disabled") x[x %notin% df7$patient_employment] &lt;- "Employed" @RetepYarrum 我首先在 2 行代码中展示了一个版本,以使其更易于理解。查看编辑。 我让它工作了一次,然后当我注意到并清理我的代码时,我搞砸了一些东西,无法让它再次工作......我会更新我原来的问题更多信息

以上是关于R - 如果在列表中找不到,则更改值的主要内容,如果未能解决你的问题,请参考以下文章

如果在 Laravel 5.1 中找不到路由,则显示 404 页面

在数据 R 中找不到列名时返回文本

SQL Server:如果在选择中的函数的表中找不到,则插入记录

如果在字符串返回方法中找不到字符串,则返回替代值

Node.Js-如果在MongoDB中找不到匹配的文档,则返回1

如何使用 .loc 对 DF 进行切片,列表中可能包含在索引/列中找不到的元素