在R中使用paste()将字符串与多个分隔符连接

时间:2018-09-20 21:24:44

标签: r string concatenation

请参见以下可重现的示例:

require(tidyverse)

set.seed(1)
reprex_df <- data.frame(
  var1 = sample(1:10),
  var2 = sample(11:20),
  var3 = sample(21:30)
)

我正在尝试使用以下代码创建一个新列,其中包含通过将每行中的其他变量连接到带有“ https://www.google.com/search?q=”的字符串而创建的URL:

reprex_df %>% mutate(new_col = c(paste("https://www.google.com/search?q=", var1, var2, var3, sep="+")))

这将导致:

https://www.google.com/search?q=+3+13+30

此问题是,它在+https://www.google.com/search?q=之间放置了var1,这不是URL的有效格式。这些字符串之间不需要分隔符。像这样:

https://www.google.com/search?q=3+13+30

我是否可以使用paste()指定在连接的这一部分使用不同的分隔符,还是必须采用完全不同的方法?有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您需要另一个g++

paste

如果您不想输入所有变量名reprex_df %>% mutate(new_col = paste0( "https://www.google.com/search?q=", paste(var1, var2, var3, sep = "+") )) # var1 var2 var3 new_col #1 3 13 30 https://www.google.com/search?q=3+13+30 #2 4 12 22 https://www.google.com/search?q=4+12+22 #3 5 16 26 https://www.google.com/search?q=5+16+26 # ... var1,请尝试使用varn,这要感谢@thelatemail

purrr::invoke

或者在reprex_df %>% mutate(new_col = paste0("https://www.google.com/search?q=", invoke(paste, ., sep = "+") ) )

base R

答案 1 :(得分:3)

  1. paste0 也许最简单的方法是使用paste0而不是使用sep指定+号作为参数:

    root <- "https://www.google.com/search?q="
    reprex_df %>% 
      mutate(new_col = paste0(root, var1, "+", var2, "+", var3))
    
  2. sprintf sprintf是另一种可能性:

    fmt <- "https://www.google.com/search?q=%d+%d+%d"
    reprex_df %>%
      mutate(new_col = sprintf(fmt, var1, var2, var3))
    
  3. sub 另一种可能性是使用问题中的代码,但在代码后面加上代码以删除第一个+:

    root <- "https://www.google.com/search?q="
    reprex_df %>% 
      mutate(new_col = paste(root, var1, var2, var3, sep="+"),
             new_col = sub("\\+", "", new_col))
    
  4. allow extra + Google忽略等号后的+,因此另一种方法是只允许多余的加号存在。

    root <- "https://www.google.com/search?q="
    reprex_df %>% 
      mutate(new_col = paste(root, var1, var2, var3, sep="+"))