如何修复R语言中州缩写转州名函数的向量处理问题
解决美国州缩写转全称的向量兼容问题
原函数的问题出在str_which的使用上——它会返回所有匹配任意输入缩写的位置,而非按输入顺序逐个匹配对应位置,所以处理向量时要么顺序混乱,要么无法返回对应数量的结果。
直接用match函数就能搞定,它会逐个匹配输入向量里的每个缩写,找到其在state.abb中的对应位置,再映射到state.name:
# 修改后的函数 abb_to_name <- function(abbr){ # 统一转大写,避免大小写匹配问题 abbr_upper <- toupper(abbr) # 逐个匹配每个缩写在state.abb中的位置,找不到返回NA idx <- match(abbr_upper, state.abb) # 按匹配位置取出对应州名 state.name[idx] }
测试向量输入
abb_to_name(c("CA","AL")) # 输出:[1] "California" "Alabama"
处理数据框(无需再用map)
library(dplyr) ex <- data.frame(STATE = c("AL", "CA", "NC", "TX", "MN")) %>% mutate(NAMES = abb_to_name(STATE)) # 查看结果 ex # STATE NAMES # 1 AL Alabama # 2 CA California # 3 NC North Carolina # 4 TX Texas # 5 MN Minnesota
可选:处理无效缩写
如果输入包含不存在的缩写,函数会返回NA,你可以按需添加替换逻辑:
abb_to_name <- function(abbr){ abbr_upper <- toupper(abbr) idx <- match(abbr_upper, state.abb) res <- state.name[idx] # 把NA替换成自定义提示文本 ifelse(is.na(res), "无效缩写", res) } # 测试 abb_to_name(c("CA", "XX", "AL")) # 输出:[1] "California" "无效缩写" "Alabama"
内容的提问来源于stack exchange,提问作者uer998877
相关产品推荐
相关产品推荐

