R语言 子函数对某些字符串不起作用

2ic8powd  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在使用子函数来清理数据集。将自由回答的性别信息更改为3个不同的类别(男性、女性、彩虹)。除了以下几个示例外,该函数工作正常:
“彩虹?”
“男性(独联体)”
“男(-ish)^_^”“女(跨)”“女(顺)”
令我困惑的是,这个函数为我需要更改的其他值工作了40次,但我不能更改这些值。谢谢!!!
我已经尝试了无数次的功能,但它不会为这些价值观的工作,我不知道为什么。

mh_in_tech <- data.frame(
  id = 1:4, 
  gender = c('femail', 'Femake', 'Rainbow?', 'Male (CIS)')
)

mh_in_tech$Gender_clean <- mh_in_tech$gender

# Here is some code that worked:
mh_in_tech$Gender_clean <- sub('femail', 'Female', mh_in_tech$Gender_clean)
mh_in_tech$Gender_clean <- sub('Femake', 'Female', mh_in_tech$Gender_clean)

# Code that did not work: 
mh_in_tech$Gender_clean <- sub('Rainbow?', 'Rainbow', mh_in_tech$Gender_clean)
mh_in_tech$Gender_clean <- sub('Male (CIS)', 'Male', mh_in_tech$Gender_clean)

mh_in_tech
#>   id     gender Gender_clean
#> 1  1     femail       Female
#> 2  2     Femake       Female
#> 3  3   Rainbow?     Rainbow?
#> 4  4 Male (CIS)   Male (CIS)
h43kikqp

h43kikqp1#

问题的原因是sub和其他相关函数基于正则表达式;但你似乎想做固定更换的,所以它应该很容易为您适应。比较以下

sub(x = "Male (CIS)",pattern = "Male (CIS)",replacement = "male")
sub(x = "Male (CIS)",pattern = "Male (CIS)",replacement = "male",fixed = TRUE)

相关问题