使用R中的循环替换字符向量中的多个字符串

时间:2018-03-17 13:26:25

标签: r

我有脚本,我想替换##

指示的一组字符串
  script <- c("This is #var1# with a mean of #mean1#")

我的键值列表是:

  pairs <- list(
             list("#var1#", "Depression"),
             list("#mean1#", "10.1")
           )

我的循环看起来像这样并完成它的工作。

  for (pair in pairs) {
    script <- gsub(pair[[1]], pair[[2]], script)
  }

但是,是否有人知道如何使用循环来解决没有的问题?

2 个答案:

答案 0 :(得分:1)

我认为通过一些更改,您可以使用glue包。更改涉及使用data.frame存储您的键值,并稍微调整文本的格式。

library(glue)

tt <- 'This is {var1} with a mean of {mean1}'

dat <- data.frame(
  'var1' = c('Depression', 'foo'),
  'mean1' = c(10.1, 0),
  stringsAsFactors = FALSE
)

glue(tt,
     var1 = dat$var1,
     mean1 = dat$mean1)

This is Depression with a mean of 10.1
This is foo with a mean of 0

答案 1 :(得分:1)

您可以使用 stringr

?str_replace中所述:

  

要在字符串的每个元素中执行多次替换,请传递a   命名向量(c(pattern1 = replacement1))到str_replace_all

所以在你的情况下:

library(stringr)

str_replace_all(script, setNames(sapply(pairs, "[[", 2), sapply(pairs, "[[", 1)))
# [1] "This is Depression with a mean of 10.1"