如何为R语言toTitleCase()设置例外,保留指定单词大写?
解决R语言toTitleCase保留"the"大写的问题
针对你的需求,这里提供两种简单的解决思路:
方法一:先转标题格式再替换特定内容
先用tools::toTitleCase()处理字符串,再通过正则表达式把"v. the"替换为"v. The",刚好匹配你数据里的场景:
library(tools) a <- c("Paul v. the man", "Molly v. the Bear") df <- data.frame(a) # 处理后生成新列 df$formatted <- gsub("v\\. the", "v. The", toTitleCase(df$a))
运行后df$formatted的结果就是:"Paul v. The Man"和"Molly v. The Bear",完全符合要求。
方法二:分割字符串分别处理
把原字符串按"v. "拆分成两部分,前半部分正常转标题格式,后半部分单独转标题格式(此时"the"处于开头位置,toTitleCase()会自动将其大写),最后再拼接起来:
library(tools) a <- c("Paul v. the man", "Molly v. the Bear") df <- data.frame(a) # 自定义处理函数 custom_title <- function(text) { split_parts <- strsplit(text, "v\\. ")[[1]] part1 <- toTitleCase(split_parts[1]) part2 <- toTitleCase(split_parts[2]) paste0(part1, "v. ", part2) } # 批量处理数据框列 df$formatted <- sapply(df$a, custom_title)
这个方法更灵活,如果之后"v. "后面的内容有变化,也能保证开头单词首字母大写。
补充说明
tools::toTitleCase()的默认规则会把冠词(如the)、短介词等在句子中间的单词转为小写,这就是直接用它会把"the"变小写的原因。通过上面两种方式,就能绕过这个默认规则,实现你想要的格式。
内容的提问来源于stack exchange,提问作者hy9fesh
相关产品推荐
相关产品推荐

