从字符列表中获取值并复制/重复它们

时间:2017-07-20 14:47:38

标签: r string

我有一个字符列表,我希望以一种获取每个值然后复制它的方式返回列表,并用连字符分隔它。例如:

"12", "34", "56", "78" 

会变成

"12-12", "34-34", "56-56", "78-78"

这一切都可能吗?

1 个答案:

答案 0 :(得分:0)

以下是可以在不键入的情况下创建相同字符串2次的方法,例如paste(x, x, x, ..., sep = "-")。我们可以使用reppaste定义函数,然后使用sapply循环遍历向量。 vec2是最终输出。

# Create example vector
vec1 <- c("12", "34", "56", "78")

# Design a function to repeat a string and concatenate by "-"
conc_fun <- function(string, times = 2){
  # The argument "times" allows the users to specify how many times to repeat 
  temp_vec <- rep(string, each = times)
  temp_string <- paste(temp_vec, collapse = "-")
  return(temp_string)
}

# Apply the conc_fun to vec1
vec2 <- sapply(vec1, conc_fun)

或者我们可以使用相同的内容创建matrix,然后使用applypaste

vec2 <- apply(matrix(rep(vec1, 2), nrow = 2, byrow = TRUE), 2, paste, collapse = "-")

基准

定义conc_fun函数后,第一种方法(使用sapply)和第二种方法(使用matrixapply)之间没有显着差异表现条款。对我来说,两者都是有效的。

library(microbenchmark)

microbenchmark(
  m1 = {vec2 <- sapply(vec1, conc_fun)},
  m2 = {vec2 <- apply(matrix(rep(vec1, 2), nrow = 2, byrow = TRUE), 2, paste, collapse = "-")}
)

Unit: microseconds
 expr    min     lq     mean median      uq     max neval
   m1 28.867 30.150 35.57701 31.433 35.6025 119.958   100
   m2 30.150 32.075 41.57487 33.358 42.0175 147.541   100