使用含USA_State列的数据集在R中创建新列USA_Region
你的思路完全可行,这是R中做这类分组匹配的标准规范实现,不需要导出到Excel就能快速完成全流程操作。
1. 构建区域-州映射表
先按照四大区域的分类规则创建匹配用的参考表,注意映射表中的州名格式要和你原始数据的USA_State列格式完全一致(如果原始数据用的是州缩写,把对应内容改成缩写即可):
library(tidyverse) # 区域-州映射表 region_map <- tibble( USA_Region = c( rep("Northeast", 10), rep("North Central", 12), rep("Southern", 17), rep("Western", 13) ), USA_State = c( # 东北部州 "Connecticut", "Maine", "Massachusetts", "New Hampshire", "Rhode Island", "Vermont", "New Jersey", "New York", "Pennsylvania", "Delaware", # 中北部州 "Illinois", "Indiana", "Iowa", "Kansas", "Michigan", "Minnesota", "Missouri", "Nebraska", "North Dakota", "Ohio", "South Dakota", "Wisconsin", # 南部州 "Alabama", "Arkansas", "Florida", "Georgia", "Kentucky", "Louisiana", "Mississippi", "North Carolina", "Oklahoma", "South Carolina", "Tennessee", "Texas", "Virginia", "West Virginia", "Maryland", "District of Columbia", "Puerto Rico", # 西部州 "Alaska", "Arizona", "California", "Colorado", "Hawaii", "Idaho", "Montana", "Nevada", "New Mexico", "Oregon", "Utah", "Washington", "Wyoming" ) )
2. 匹配单州行(占多数的常规情况)
如果USA_State列每行仅包含一个州,直接用左连接就能完成匹配,新增USA_Region列:
# 假设你的原始数据集命名为df df <- df %>% left_join(region_map, by = "USA_State")
3. 处理包含多个州的特殊行
如果部分行是多个州用固定分隔符(如逗号、斜杠)拼接的,可以自定义匹配逻辑处理,示例为按行内第一个出现的州匹配对应区域(如果需要标注所有涉及的区域,修改匹配逻辑返回所有命中结果拼接即可):
# 假设多州用逗号作为分隔符 df <- df %>% mutate(state_list = str_split(USA_State, ",")) %>% rowwise() %>% mutate(USA_Region = region_map$USA_Region[which(region_map$USA_State == str_squish(state_list[1]))][1]) %>% ungroup() %>% select(-state_list)
小提示:如果匹配后出现NA值,先检查原始数据的州名是否有多余空格、大小写不统一的问题,可以先用str_squish()、str_to_title()等函数统一处理原始USA_State列的格式后再做匹配。
内容的提问来源于stack exchange,提问作者leearng
相关产品推荐
相关产品推荐

