str_to系列函数扩展需求:支持保留指定缩写词的大小写格式
R 字符串大小写转换保留指定缩写的实现方法
针对大小写转换时指定缩写保持全大写的需求,可通过以下两种方案实现:
方案1:自定义轻量转换函数(仅依赖stringr)
适合自定义程度高的场景,可灵活适配单个单词、多词句子的转换需求:
library(stringr) # 1. 预先定义需要保留全大写的缩写列表 acronyms <- c("nyc", "la") acronyms_low <- tolower(acronyms) # 2. 单单词场景转换函数 str_to_title_with_acronym <- function(x, acronyms_low) { sapply(x, function(s) { s_low <- tolower(s) if (s_low %in% acronyms_low) { return(toupper(s)) } str_to_title(s) }, USE.NAMES = FALSE) } # 测试效果 x <- c("nyc", "buffalo", "la", "raleigh", "richmond") str_to_title_with_acronym(x, acronyms_low) #> [1] "NYC" "Buffalo" "LA" "Raleigh" "Richmond"
如果需要处理包含多个单词的长字符串,可使用如下适配版本:
# 多词句子场景转换函数 str_to_title_sentence <- function(s, acronyms_low) { words <- str_split(s, "\\s+")[[1]] processed <- sapply(words, function(w) { w_low <- tolower(w) if (w_low %in% acronyms_low) toupper(w) else str_to_title(w) }, USE.NAMES = FALSE) paste(processed, collapse = " ") } # 测试效果 x2 <- c("nyc flight data", "la monthly report") sapply(x2, str_to_title_sentence, acronyms_low = acronyms_low, USE.NAMES = FALSE) #> [1] "NYC Flight Data" "LA Monthly Report"
方案2:使用janitor包内置功能(适合表格列名处理场景)
如果是处理表格列名这类场景,可直接使用janitor包的make_clean_names函数,内置缩写保留参数:
library(janitor) x <- c("nyc", "buffalo", "la", "raleigh", "richmond") make_clean_names(x, case = "title", acronyms = c("NYC", "LA")) #> [1] "NYC" "Buffalo" "LA" "Raleigh" "Richmond"
内容的提问来源于stack exchange,提问作者phargart
相关产品推荐
相关产品推荐

