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

zfycwa2u  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(120)

我有一本记录本,上面有三栏是街道地址。填写表格的个人有时会假设“街道地址2”是“城市,州和邮政编码”。我想删除“街道地址2”中的条目,如果它看起来像是个人所做的。我发现这在R/Tidyverse中很难做到,因为Excel中的解决方案很简单。下面是一个示例:

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

在这个示例DF中,我期望我的代码将记录1:address 2设置为等于NA。我已经尝试了几次ifelse语句的迭代都没有用,似乎最有希望的方法是使用str_detect(),如下所示:

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

理论上,如果在address 2记录中找到“塔尔萨”,则应将address 2设置为NA,否则保留address 2记录。但是,它给了我一个错误:
错误的方法(“mutate”):没有适用于“mutate”的方法应用于类“logical”的对象
任何想法将非常赞赏如何做到这一点,以及为什么这将不会工作。最好的-史蒂夫

y3bcpkx1

y3bcpkx11#

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

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

相关问题