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

如何在R中利用数据框实现str_replace_all批量文本替换?

从数据框生成替换规则实现批量字符串替换

问题背景

原本通过手动编写命名向量,使用str_replace_all处理dog_descriptions数据框的breed_primary字段:

dog_descriptions <- data.frame(breed_primary = c("Pit Bull Terrier",
                                                 "Labrador Retriever",
                                                 "Border Collie"),
                               number_of_legs = rep(4, 3))

dog_descriptions2 <-
  dog_descriptions %>% 
  mutate(breed_primary2 = str_replace_all(breed_primary, c("Pit Bull Terrier" = "Pit Bull\nTerrier", "Labrador Retriever" = "Labrador\nRetriever", "Border Collie" = "Border\nCollie")))

现在希望改用replacement_input数据框(已定义原字符串和目标替换字符串)来实现批量替换,避免手动编写长替换向量:

replacement_input <- data.frame(replace = c("Pit Bull Terrier", 
                                            "Labrador Retriever", 
                                            "Border Collie", 
                                            "Fourth Entry"), 
                                replace_with = c("Pit Bull\nTerrier", 
                                                 "Labrador\nRetriever", 
                                                 "Border\nCollie", 
                                                 "Replace 4th"))

解决方案

方法1:使用tidyr::deframe转换数据框为命名向量

deframe函数可以直接将两列数据框转换为名称=原字符串,值=目标字符串的命名向量,完美匹配str_replace_all的替换规则要求:

library(dplyr)
library(stringr)
library(tidyr)

# 将数据框转换为命名替换向量
replace_vector <- deframe(replacement_input)

# 执行批量替换
dog_descriptions2 <- dog_descriptions %>%
  mutate(breed_primary2 = str_replace_all(breed_primary, replace_vector))

方法2:基础R的setNames构造命名向量

如果不想加载tidyr包,可以用基础R的setNames函数手动构造命名向量:

library(dplyr)
library(stringr)

# 构造命名替换向量
replace_vector <- setNames(replacement_input$replace_with, replacement_input$replace)

# 执行批量替换
dog_descriptions2 <- dog_descriptions %>%
  mutate(breed_primary2 = str_replace_all(breed_primary, replace_vector))

说明

  • 两种方法都会自动将replacement_input中的所有替换规则转换为符合要求的向量,无需手动逐个编写
  • str_replace_all会按向量中的顺序匹配替换,若存在字符串重叠的情况,需注意调整replacement_input的行顺序(优先匹配长字符串)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:00:28