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")] <- "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%' <- Negate(
%in%) x <- c(df7$patient_employment, "Unemployed", "Retired", "Self-Employed", "Disabled") x[x %notin% df7$patient_employment] <- "Employed"
@RetepYarrum 我首先在 2 行代码中展示了一个版本,以使其更易于理解。查看编辑。
我让它工作了一次,然后当我注意到并清理我的代码时,我搞砸了一些东西,无法让它再次工作......我会更新我原来的问题更多信息以上是关于R - 如果在列表中找不到,则更改值的主要内容,如果未能解决你的问题,请参考以下文章
如果在 Laravel 5.1 中找不到路由,则显示 404 页面
SQL Server:如果在选择中的函数的表中找不到,则插入记录