1

我正在寻找使用键迭代替换字符串中的文本。我有下面的代码,但我想知道是否有更简单或更有效的方法来做到这一点

library(stringi)
library(magrittr)
library(dplyr)

old_texts = c("blah blah value1 blah blah value2",
             "blah value1 blah value2")

key = data_frame(
  old = c("value1", "value2"),
  new = c("value3", "value4") ) 

replace_key_individual = function(old_text, key)
  key %>%
  mutate(call = paste0(
    "stri_replace_all_fixed('", old, "','", new, "')") ) %>%
  summarize(new_call = 
              call %>%
              paste(collapse = " %>% ")) %>%
  `$`(new_call) %>%
  paste("old_text %>% ", .) %>%
  parse(text = .) %>%
  eval

replace_key = function(old_texts, key)
  old_texts %>%
  sapply(. %>% replace_key_individual(key)) %>%
  unname

replace_key(old_texts, key = key)
4

2 回答 2

2

如果我理解正确,您可能只想试试这个:

old_texts %>% stri_replace_all_fixed(key$old, key$new, vectorize_all=FALSE)
#[1] "blah blah value3 blah blah value4"
#[2] "blah value3 blah value4"

# without the pipe operator:
stri_replace_all_fixed(old_texts, key$old, key$new, vectorize_all=FALSE)
于 2015-11-27T21:54:32.163 回答
-1

基本函数 gsub() 使用正则表达式进行文本替换。例如:

old_texts = c("blah blah value1 blah blah value2",
              "blah value1 blah value2")
new_text = gsub("value1", "value3", old_texts)

这个函数一次只替换一个值,所以你仍然需要将它包装在一些东西中来实现你的“旧”和“新”键结构,但是使用它会大大简化你的代码。

于 2015-11-27T21:32:13.513 回答