【问题标题】:Repeat vector by a vector number of times将向量重复向量次数
【发布时间】:2021-07-09 13:44:04
【问题描述】:

让我们考虑字符串向量:

string_vector <- c("big & huge", "big & huge & small", "tiny",
                   "very_small & tremendous")

和另一个包含整数的向量:

number <- c(2, 1, 3, 4)

我想重复 string_vector 的元素的次数等于number 向量中对应的整数。即string_vector[1]重复number[1]次,string_vector[2]重复number[2]次等等。

我的解决方案

我的解决方案尽可能简单:

vec <- c()
for (i in seq_len(length(number))) {
  vec <- append(vec, rep(string_vector[i], number[i]))
}

问题

我的问题是我的解决方案有点不方便。我在想是否有可能以某种方式省略循环。我不太确定怎么做。不知道如何通过不使用循环来解决这个问题?

【问题讨论】:

    标签: r string loops vector


    【解决方案1】:

    如果我没记错的话,解决办法是这样的:

    rep(string_vector,number)
     [1] "big & huge"              "big & huge"              "big & huge & small"      "tiny"                   
     [5] "tiny"                    "tiny"                    "very_small & tremendous" "very_small & tremendous"
     [9] "very_small & tremendous" "very_small & tremendous"
    

    【讨论】:

    • 哈哈,可惜我没有检查过。非常感谢您的回答。
    【解决方案2】:

    循环是完全没有必要的,多亏了精彩的Map().Map 将函数应用于给定向量的相应元素。 使用您的数据,您可以执行以下操作:

    v <- unname(unlist(Map(function(x,y)rep(x,y),string_vector,number)))
    identical(v,vec)
    

    Map 默认返回一个命名列表,因此使用unname(unlist()) 您可以获得您要查找的向量。 我邀请您查看该功能的帮助页面,因为它在许多情况下会让您的生活更轻松。

    【讨论】:

      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2013-06-04
      • 2011-11-29
      • 2021-09-09
      • 2016-02-16
      • 2017-10-25
      相关资源
      最近更新 更多