gpt4 book ai didi

r - 交替组合两个向量

转载 作者:行者123 更新时间:2023-12-04 12:02:33 26 4
gpt4 key购买 nike

从这篇文章,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) {...}
  • xy是两个相同类型的向量,它们的长度可以不同。
  • 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com