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

如何使用命名列表替换数据框列中的城市名称值

用purrr结合命名列表替换城市全称到缩写

嘿,这个需求用purrr结合命名列表完全能轻松实现!我给你拆解一下具体实现思路和代码示例:

首先,先明确你的命名列表结构:你给出的示例city_names_short <- list("ANA" = "Anaheim", "BOS" = "Boston")是缩写作为键,全称作为值,我们的目标是把数据框里的全称替换成对应的缩写键。

步骤1:准备测试环境和数据

先加载需要的包,构造测试数据框:

library(tidyverse) # 包含dplyr和purrr,处理数据框更方便

# 你的命名列表:键=缩写,值=全称
city_names_short <- list("ANA" = "Anaheim", "BOS" = "Boston", "CHI" = "Chicago")

# 测试用的数据框,包含一些城市全称,还有一个不在列表里的城市
df <- tibble(city = c("Anaheim", "Boston", "Chicago", "New York", "Boston"))

步骤2:用purrr::map_chr()实现替换

这里有两种常用的写法,都能达到目的:

写法一:直接遍历匹配

利用purrr::keep()筛选出匹配的列表元素,再提取对应的缩写键:

df <- df %>%
  mutate(city_abbr = map_chr(city, ~{
    # 找到列表中值等于当前城市的元素,再取它的键(也就是缩写)
    matched_abbr <- names(keep(city_names_short, .x == .))
    # 有匹配就返回缩写,没匹配就返回原城市名(也可以改成NA_character_)
    if (length(matched_abbr) > 0) matched_abbr else .x
  }))

写法二:先反转列表,再快速映射

如果你的数据量比较大,先把命名列表反转(让全称当键,缩写当值),匹配会更高效:

# 反转列表:把原列表的键值对调换,转成字符向量
city_name_map <- inv_map(city_names_short) %>% flatten_chr()

# 用map_chr快速映射,%||%处理无匹配的情况(返回原名称)
df <- df %>%
  mutate(city_abbr = map_chr(city, ~city_name_map[[.x]] %||% .x))

结果展示

运行完上面的代码后,你的数据框会新增一列city_abbr,内容如下:

citycity_abbr
AnaheimANA
BostonBOS
ChicagoCHI
New YorkNew York
BostonBOS

小提示

  • 如果你的命名列表是全称当键,缩写当值(比如list("Anaheim" = "ANA")),那可以直接跳过反转步骤,直接用map_chr(city, ~city_names_short[[.x]] %||% .x)。
  • 如果你希望无匹配的城市返回NA而不是原名称,把%||% .x改成%||% NA_character_就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:09:54