我正在清理公司名称列表,但很难有选择地将大小写转换为标题大小写。我可以使用mutate(str_to_title(...))
函数将整个字段转换为标题大小写,这对我的大多数值都很有效,但有少数公司的标题是“ABC Company”或“John Doe Company LLC”,当我应用标题大小写时,它们的正确大小写就会混乱(“Abc Company”和“John Doe Company Llc”)。
我以为我可以使用case_when()
特定值的向量来创建一个函数,该函数告诉 R 仅将标题大小写应用于不等于我指定的值向量的值。但是,我要么收到警告“较长的对象长度不是较短的对象长度的倍数”,并且所有值都转换为标题大小写,要么我只是得到字段中的向量值的 NA,并为不在向量中的值更正标题大小写值。我哪里做错了?
# Example Code #
library(tidyverse)
## Reproducible Example ##
test<-structure(list(`Company Name` = c("ABC Company", "John Doe Company LLC",
"rainbow road company", "yellow brick road incorporated", "XYZ",
"Mostly Ghostly Company", "hot Leaf juice tea company")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -7L))
test<-test%>%
mutate(`Company Name`= case_when(`Company Name`!= c("ABC Company","John Doe Company LLC","XYZ") ~ str_to_title(`Company Name`)))
# Error #
Warning message:
There was 1 warning in `mutate()`.
ℹ In argument: `Company Name = case_when(...)`.
Caused by warning in `` `Company Name` != c("ABC Company", "John Doe Company LLC", "XYZ") ``:
! longer object length is not a multiple of shorter object length
当您
Company Name
使用“case_when()”进行变异时,您需要指定一个如下默认情况:由于您的示例中缺少它,如果您的案例 1 不适用,则没有默认值,因此其余部分将填充 NA 值。
或者,您可以使用仅将以小写字母开头的字符串大写的函数,这样就无需首先定义例外。我在下面列出了两个示例 :)
最终结果如下:
这是一种与更一般情况不同的方法。如果您的原始数据中包含“LLC”之类的内容,我们可以保留这些内容,但其他内容则保留标题大小写。
首先,我们找到所有大写单词的位置,然后将所有内容改为标题大小写,然后将大写字母放回其原始位置。还有一个 if 块,用于在没有大写字母可替换时跳过。
我们可以看到它可以与您的测试数据一起使用:
创建于 2024-11-26,使用reprex v2.1.1