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

使用含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:00