我有一个名字的载体:

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

我该怎么做?我宁愿使用一个载体化函数,也不愿迭代.

我try 了这些代码,但得到了错误的结果(可能是由于收件箱或其他原因):

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) cumsum(...)是名称的索引,即1 2 2 2 3 3 3 3 4 4 5 5 6 7 8,因此请索引到names中并将numbers粘贴到末尾.不使用外部包装.

paste0(names[cumsum(numbers == 0)], numbers)
## [1] "a0" "b0" "b1" "b2" "c0" "c1" "c2" "c3" "d0" "d1" "e0" "e1" "f0" "g0" "h0"

2)第二种方法,也是基于cumsum(...),是使用rle获取行程长度,重复每个名称该次数,然后粘贴数字. 这也不使用任何包.

paste0(rep(names, rle(cumsum(numbers == 0))$lengths), numbers)
## [1] "a0" "b0" "b1" "b2" "c0" "c1" "c2" "c3" "d0" "d1" "e0" "e1" "f0" "g0" "h0"

3)这个没有使用cumsum,但它确实使用了一个包.在numbers中,将0替换为名称,将其他数字替换为NA. 然后使用na.locf0填写NA并粘贴数字.

library(zoo)

paste0(na.locf0(replace(NA * numbers, numbers == 0, names)), numbers)
## [1] "a0" "b0" "b1" "b2" "c0" "c1" "c2" "c3" "d0" "d1" "e0" "e1" "f0" "g0" "h0"

注意

问题输入

names <- c("a", "b", "c", "d", "e", "f", "g", "h")
numbers <- c(0, 0:2, 0:3, 0:1, 0:1, 0, 0, 0)

R相关问答推荐

如何将Rmarkdown中包含图像和文本的行的两个单元格与.PDF输出垂直对齐?

是否有R代码来判断一个组中的所有值是否与另一个组中的所有值相同?

卸载安装了BRM的模型发出的警告

带有gplot 2的十字舱口

单个轮廓重叠条的单独图例

通过在colname中查找其相应值来创建列

try 将 colored颜色 编码添加到ggploly的标题中

更新R中的数据表(使用data.table)

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

如何在PDF格式的kableExtra表格中显示管道字符?

使用未知字符数(不受限制的最大长度)的Lookback有什么好的替代方案?

循环遍历多个变量,并将每个变量插入函数R

在散点图中使用geom_point放置线图例

使用列中的值来调用函数调用中应使用的其他列

按组跨多列创建伪变量

以任意顺序提取具有多个可能匹配项的组匹配项

将文本批注减少到gglot的y轴上的单个值

如何将宽格式的患者信息数据高效地转换为患者计数的时间序列?

使用函数从R中的列中删除标高

如何获取R chromote中的当前URL?