【问题标题】:Combining 2 vectors in alternating way by step of 4 in R在 R 中以 4 的步长交替组合 2 个向量
【发布时间】:2020-11-28 18:16:11
【问题描述】:

我有两个相同长度的向量:

a = c(723, 680, 2392, 2063, 721, 746, 2053, 2129)
b = c(1, 2, 3, 4, 5, 6, 7, 8)

现在我想合并它们,但步长为 4 个元素,更准确地说,我想要作为输出:

723 680 2392 2063 1 2 3 4 721 746 2053 2129 5 6 7 8

【问题讨论】:

    标签: r vector merge rbind cbind


    【解决方案1】:

    我们可以通过拆分来做到这一点。创建一个函数以使用 gl 创建一个分组变量,该变量在“n”块(这里 n 为 4)处递增,然后将两个向量拆分为 list,使用 Map 连接相应的 list 元素和unlist list 创建一个vector

    f1 <- function(x, n) split(x, as.integer(gl(length(x), n, length(x))))
    unlist( Map(c, f1(a, 4), f1(b, 4)), use.names = FALSE)
    #[1]  723  680 2392 2063    1    2    3    4
    #[9]  721  746 2053 2129    5    6    7    8
    

    或者如果长度相同,那么我们可以rbind 并在创建matrix 后连接

    c(rbind(matrix(a, nrow =4), matrix(b, nrow = 4)))
    #[1]  723  680 2392 2063    1    2    3    4  721  746 2053 2129    5    6    7    8
    

    【讨论】:

    • 谢谢它的工作。我使用了第二个,因为我有 2 个长度相同的向量。我认为我们应该将 rbind 与 c 一起使用; n=4 有点棘手。
    • @Will rbindc 如果我们不必在每个“n”处分开,matrix 调用将使用 dim 属性进行操作
    【解决方案2】:

    这里有一些其他的基本 R 选项

    • 使用order
    c(a,b)[order(c(2 * ceiling(seq_along(a) / 4) - 1, 2 * ceiling(seq_along(b) / 4)))]
    
    • 使用split + unlist
    unlist(
      split(
        c(a, b),
        c(2 * ceiling(seq_along(a) / 4) - 1, 2 * ceiling(seq_along(b) / 4))
      ),
      use.names = FALSE
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 2021-12-01
      • 2011-12-27
      • 2018-11-03
      相关资源
      最近更新 更多