我有一个名字向量:
names <- c("a", "b", "c", "d", "e", "f", "g", "h")
我想分别将这些名称与这些数字进行一系列组合:
numbers <- c(0, 0:2, 0:3, 0:1, 0:1, 0, 0, 0)
所以我的组合是:
a0 b0 b1 b2 c0 c1 c2 c3 d0 d1 e0 e1 f0 g0 h0
我该怎么做?我宁愿使用向量化函数而不是迭代。
我尝试了这些代码,但得到了错误的结果(可能是由于回收或其他原因):
paste0(names, numbers, recycle0 = F)
paste0(names, numbers, recycle0 = T)
paste0(names, numbers |> as.list())
purrr::map_chr(names, paste0(c(0, 0:2, 0:3, 0:1, 0:1, 0, 0, 0)))
还有一些我记不太清楚了。
1) The
cumsum(...)
是名称的索引,即 1 2 2 2 3 3 3 3 4 4 5 5 6 7 8,因此索引到names
并粘贴numbers
到末尾。不使用任何外部包。2)第二种方法也基于
cumsum(...)
,是使用rle
来获取游程长度,将每个名称重复一定次数,然后粘贴到数字上。这也不使用任何包。3)这个没有使用,
cumsum
但它确实使用了一个包。将numbers
0 替换为名称,将其他数字替换为 NA。然后用于na.locf0
填写 NA 并粘贴到数字上。笔记
从问题输入
numbers
这里使用作为具有最大序列的向量的解决方案你可以使用
mapply
:输出: