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

如何在R语言中使用dplyr基于另一列属性添加新列?

嗨,这个需求在数据处理里太常见了!用dplyr可以轻松搞定,我给你分享几种实用的方法,你可以根据自己的场景选:

方法1:用left_join()匹配映射表(最推荐,适合映射条目多或需维护的情况)

你已经有了table2这个现成的状态-区域映射表,直接用left_join()把两个表按State列合并就好,这种方式不用把映射逻辑硬写在代码里,后续要改映射只需要更新table2就行,非常灵活。

先确保你加载了dplyr包(没安装的话先跑install.packages("dplyr")):

library(dplyr)

# 合并表,给table1添加Region列
table1_with_region <- table1 %>%
  left_join(table2, by = "State")

运行后table1_with_region就会和你想要的table2结构完全一致,而且不会丢失table1里的任何行(就算table1以后加了新的State,只要table2里有对应条目,就能自动匹配)。

方法2:用mutate() + case_when()直接写映射(适合映射条目少的情况)

如果不想单独维护table2,可以直接在mutate()里用case_when()逐条定义State对应的Region,写法直观:

table1_with_region <- table1 %>%
  mutate(Region = case_when(
    State == "NY" ~ "Northeast",
    State == "IL" ~ "Midwest",
    State == "CA" ~ "West",
    State == "PA" ~ "Northeast",
    State == "FL" ~ "Southeast",
    State == "MI" ~ "Midwest",
    State == "AZ" ~ "West",
    # 兜底:如果有未匹配的State,返回"Other"(可选,不加的话会返回NA)
    TRUE ~ "Other"
  ))

方法3:用mutate() + recode()简洁替换(适合短映射)

这种写法比case_when更紧凑,适合映射关系简单的场景:

table1_with_region <- table1 %>%
  mutate(Region = recode(State,
    "NY" = "Northeast",
    "IL" = "Midwest",
    "CA" = "West",
    "PA" = "Northeast",
    "FL" = "Southeast",
    "MI" = "Midwest",
    "AZ" = "West",
    # 同样可以加默认值
    .default = "Other"
  ))

小总结

  • 要是映射条目多、以后可能修改,优先用left_join的方法,维护起来更省心;
  • 映射少的话,case_when或recode更直接,不用额外的映射表。

内容的提问来源于stack exchange,提问作者brinbrin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:58:08