Tidyverse:如果记录值的一部分包含在另一列中,如何用 NA 替换字符列?

问题描述 投票:0回答:1

我有一个包含三列街道地址的记录集。填写表格的个人有时会假设“街道地址 2”代表“城市、州和邮政编码”。如果“街道地址 2”中的条目看起来像是该人所做的,我想删除该条目。鉴于 Excel 中解决方案的简单性,我发现在 R/Tidyverse 中很难做到这一点。这是一个例子:

df <- data.frame(address2=c("Tulsa, OK", "Apt. 1","Harbor Club Apartments"), city = c("Tulsa", "Tulsa", "Tulsa"))

在此示例 DF 中,我希望我的代码将记录 1:address2 设置为 NA。我已经尝试了几次 ifelse 语句的迭代,但没有成功,似乎最有希望的方法是使用 str_detect(),如下所示:

df <- mutate(address2 = ifelse(str_detect(df$address2,df$city)),NA, address2)

理论上,如果在address2记录中找到“Tulsa”,则应将address2设置为NA,否则保留address2记录。但是,它给了我一个错误:

UseMethod(“mutate”) 中的错误: 没有适用的“mutate”方法应用于“逻辑”类的对象

任何关于如何做到这一点以及为什么这不起作用的想法将不胜感激。最好的 - 史蒂夫

r if-statement dplyr mutate
1个回答
0
投票

您的方法很好,但有一些语法问题需要纠正,例如

library(tidyverse)

df <- data.frame(address2=c("Tulsa, OK", "Apt. 1","Harbor Club Apartments"),
                 city = c("Tulsa", "Tulsa", "Tulsa"))
df
#>                 address2  city
#> 1              Tulsa, OK Tulsa
#> 2                 Apt. 1 Tulsa
#> 3 Harbor Club Apartments Tulsa

df <- mutate(df, address2 = if_else(str_detect(address2, city), NA, address2))
df
#>                 address2  city
#> 1                   <NA> Tulsa
#> 2                 Apt. 1 Tulsa
#> 3 Harbor Club Apartments Tulsa

创建于 2023-10-11,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.