R语言中州缩写转全称及地图数据合并异常问题求助
解决州缩写转全称匹配地图数据的问题
这个问题我之前也碰到过,核心是你用错了州缩写和全称的匹配方式,导致R把州缩写当成了整数索引去取state.name,才出现WV被错误映射成Wyoming的情况。下面是具体的问题分析和修正方案:
问题根源
你直接使用state.name[food$State]时,因为food$State是因子类型,R会自动把因子转换成对应的整数(比如因子水平的排序位置),而不是根据州缩写的实际含义去匹配内置的state.abb(州缩写向量)。比如WV作为因子可能被转换成某个整数,刚好对应state.name里的Wyoming,这就完全偏离了你的需求。
修正步骤及代码
1. 先把因子类型的州缩写转成字符类型
避免R自动将因子转为整数索引:
food$State <- as.character(food$State)
2. 正确匹配州缩写与全称
利用R内置的state.abb(对应州缩写)和state.name(对应州全称)的一一对应关系,用match()函数找到每个缩写的位置,再提取对应的全称,最后处理成和map_data("state")的region一致的格式(无空格的小写):
food$region <- gsub(" ", "", tolower(state.name[match(food$State, state.abb)]))
3. 完整修正后的代码
library(ggplot2) library(maps) # 读取数据 FoodSvc <- read.csv("C:/Users/adam/FoodSrvcByCounty.csv") food <- data.frame(FoodSvc) # 处理州缩写到匹配地图的格式 food$State <- as.character(food$State) food$region <- gsub(" ", "", tolower(state.name[match(food$State, state.abb)])) # 获取地图数据并合并 all_states <- map_data("state") food_map_data <- merge(all_states, food, by = "region")
这样处理后,WV会被正确转换为westvirginia,和map_data("state")里的region字段完全匹配,合并数据时就不会出现异常了。
内容的提问来源于stack exchange,提问作者Adam Chicago
相关产品推荐
相关产品推荐

