如何在R中通过编程扩展并重排数组得到交替排列的目标数组?
R实现两个等长向量交替排列的最简方法
已知两个长度相同的向量:
cols1 <- paste0(letters[1:3]),输出为["a", "b", "c"]cols2 <- paste0(cols1, ".new"),输出为["a.new", "b.new", "c.new"]
要在不使用循环的前提下,得到交替排列的向量cols3(结果为 ["a", "a.new", "b", "b.new", "c", "c.new"]),以下是几种最简实现方式:
基础R最优方案:rbind + c()展开
将两个向量按行绑定为矩阵,再用c()直接展开矩阵(R中矩阵默认按列读取元素),这是最简洁高效的基础R方法:
cols1 <- paste0(letters[1:3]) cols2 <- paste0(cols1, ".new") cols3 <- c(rbind(cols1, cols2))
运行结果:
[1] "a" "a.new" "b" "b.new" "c" "c.new"
可选方案:索引重排(适合理解逻辑)
通过重复索引配合偏移量,重新排列两个向量的元素:
cols3 <- c(cols1, cols2)[rep(1:length(cols1), each = 2) + c(0, length(cols1))]
这种方法逻辑清晰,但代码长度比第一种方案长,日常场景更推荐第一种。
Tidyverse场景方案:purrr::flatten_chr
如果已经加载tidyverse工具包,可以用map2配对对应元素后扁平化:
library(purrr) cols3 <- flatten_chr(map2(cols1, cols2, ~c(.x, .y)))
该方法需要依赖第三方包,适合本身就在用tidyverse的工作流。
内容的提问来源于stack exchange,提问作者IVIM
相关产品推荐
相关产品推荐

