如何用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
相关产品推荐
相关产品推荐

