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

如何用stringr包将数据框字符串转换为指定命名向量结构

从数据框生成指定结构的命名向量

数据框与需求

现有如下存储足球俱乐部全称和简称的数据框:

df <- structure(list(teams_names_long = c("Bayer Leverkusen", "Brighton & Hove Albion", 
"Deportivo La Coruña", "Eintracht Frankfurt", "Huddersfield Town"
), teams_names_short = c("Leverkusen", "Brighton", "La Coruña", 
"Eint Frankfurt", "Huddersfield")), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -5L))

需要生成可直接在R中使用的命名向量,结构如下:

desired_structure <- c(
      "Bayer Leverkusen" = "Leverkusen",
      "Brighton & Hove Albion" = "Brighton",
      "Deportivo La Coruña" = "La Coruña",
      "Eintracht Frankfurt" = "Eint Frankfurt",
      "Huddersfield Town" = "Huddersfield")

问题分析

你之前用str_flatten+str_glue的方法,本质是生成了一段字符串文本,不是R可直接调用的命名向量,所以达不到预期效果。

正确解法

方法1:直接生成命名向量(推荐)

这是最简洁高效的方式,直接利用数据框的列创建:

# 用简称作为向量值,全称作为向量名称
named_vec <- df$teams_names_short
names(named_vec) <- df$teams_names_long

运行后得到的named_vec与目标结构完全一致,可直接在R中使用:

named_vec
#>            Bayer Leverkusen Brighton & Hove Albion      Deportivo La Coruña 
#>                  "Leverkusen"                "Brighton"               "La Coruña" 
#>       Eintracht Frankfurt        Huddersfield Town 
#>               "Eint Frankfurt"            "Huddersfield"

方法2:生成可复制的代码字符串

如果需要生成能直接复制运行的代码文本(用于文档或分享),可以改进字符串拼接逻辑:

library(stringr)
library(glue)

# 生成每一行的代码片段
code_lines <- str_glue('  "{df$teams_names_long}" = "{df$teams_names_short}"')
# 拼接成完整的代码字符串
code_str <- str_c("desired_structure <- c(\n", str_flatten(code_lines, ",\n"), "\n)")

# 打印可复制的标准代码
cat(code_str)

运行后会输出符合要求的R代码:

desired_structure <- c(
  "Bayer Leverkusen" = "Leverkusen",
  "Brighton & Hove Albion" = "Brighton",
  "Deportivo La Coruña" = "La Coruña",
  "Eintracht Frankfurt" = "Eint Frankfurt",
  "Huddersfield Town" = "Huddersfield"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:06:20