从这篇文章,Alternate, interweave or interlace two vectors ,显示了一种交替组合两个向量的便捷方法:
x <- 1:3 ; y <- 4:6
c(rbind(x, y)) # [1] 1 4 2 5 3 6
但是这种方法只适用于两个向量长度相同的情况。现在我想找到一种通用的方法来做到这一点。
这是我的想法:
fun <- function(x, y, n) {...}
x
和 y
是两个相同类型的向量,它们的长度可以不同。 n
表示交替间隔, . 预期输出:
x <- 1:5 ; y <- c(0, 0, 0)
fun(x, y, n = 1) # 1 0 2 0 3 0 4 5
fun(x, y, n = 2) # 1 2 0 3 4 0 5 0
fun(x, y, n = 5) # 1 2 3 4 5 0 0 0
感谢帮助。
最佳答案
第一次拆分 x
成组n
并将其堆叠成一个长的data.frame。同样堆栈y
然后 rbind
将这些数据帧放在一起,按 ind
对它们进行排序(组号)并取values
柱子。
fun <- function(x, y, n) {
sx <- stack(split(x, c(gl(length(x), n, length(x)))))
sy <- stack(as.list(setNames(y, seq_along(y))))
r <- rbind(sx, sy)
r[order(r$ind), "values"]
}
x <- 1:5 ; y <- c(0, 0, 0)
fun(x, y, 1)
## [1] 1 0 2 0 3 0 4 5
fun(x, y, 2)
## [1] 1 2 0 3 4 0 5 0
fun(x, y, 5)
## [1] 1 2 3 4 5 0 0 0
关于r - 交替组合两个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53802352/