【问题标题】:Split A Vector to Nonoverlapping Sub-Vector with Equal Length in R将向量拆分为R中等长的非重叠子向量
【发布时间】:2021-09-27 22:21:37
【问题描述】:

我希望R 将任何向量拆分为具有以下条件的一系列子向量:

  1. 每个子向量的长度必须相等l

  2. 没有两 (2) 个子向量必须重叠

我试过了:

当父向量vec能被子向量长度l整除时

vec <- 1:11 # parent vector.
l <- 2 # number of elements that each sub-vector must contain.
blk <- split(vec, ceiling(seq_along(vec) / l))
test <- length(vec) %% l == 0

$1 [1] 1 2

$2 [1] 3 4

$3 [1] 5 6

$4 [1] 7 8

$5 [1] 9 10

$6 [1] 11

当父向量vec不能被子向量长度l整除时

vec <- 1:11 # parent vector.
l <- 3 # number of elements that each sub-vector must contain.
blk <- split(vec, ceiling(seq_along(vec) / l))
test <- length(vec) %% l == 0

$1 [1] 1 2 3

$2 [1] 4 5 6

$3 [1] 7 8 9

$4 [1] 10 11

我想要什么

如果最后一个子向量没有达到设定的长度丢弃,否则包含。

编辑

test <- length(x) %% l == 0

我正在考虑一种可以编写条件语句的方法,如果test 是FALSE,则丢弃最后一个子向量,但如果test 是TRUE,则包含最后一个子向量。

【问题讨论】:

    标签: r vector split


    【解决方案1】:

    您可以为条件 lengths(blk) == l 设置结果子集。

    vec <- 1:11 # parent vector.
    l <- 3 # number of elements that each sub-vector must contain.
    blk <- split(vec, ceiling(seq_along(vec) / l))
    blk[lengths(blk) == l]
    #if(length(blk[length(blk)]) != l) blk[length(blk)] <- NULL #Alternative
    #$`1`
    #[1] 1 2 3
    #
    #$`2`
    #[1] 4 5 6
    #
    #$`3`
    #[1] 7 8 9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2013-08-26
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多