You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:10:30