我想将其拆分为三个块,其大小尽可能相等,这样如果等式 可能,则较早的块比后面的块有更多的条目。
说我有类似的东西:
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 , 15, 16, 17, 18, 19)
我想:
[1]
1, 2, 3, 4, 5, 6, 7
[2]
8, 9, 10, 11, 12, 13
[3]
14, 15, 16, 17, 18, 19
我可以通过定义我自己的函数来实现这一点,使用x
模3的长度,以及x
长度的最小值除以3来确定每个块的大小,但是有哪些方法可以在split
或某些已经定义过的东西中实现这一目标?
答案 0 :(得分:1)
我们将length
划分为&#39; x&#39;在使用split
和ceiling
&#39; i1&#39;复制3的序列后,按3和round
。
i1 <- length(x)/3
split(x, rep(1:3, c(ceiling(i1), round(i1), floor(i1))))
#$`1`
#[1] 1 2 3 4 5 6 7
#$`2`
#[1] 8 9 10 11 12 13
#$`3`
#[1] 14 15 16 17 18 19
答案 1 :(得分:1)
使用seq_along
生成索引向量并使用模块除法将其划分为三个块,对索引进行排序并对已排序的索引进行拆分以得到预期结果:
split(x, sort((seq_along(x) - 1)%%3)) # -1 here to convert it to zero based indices so that
# extra elements will always stack from earlier chunks
# $`0`
# [1] 1 2 3 4 5 6 7
# $`1`
# [1] 8 9 10 11 12 13
# $`2`
# [1] 14 15 16 17 18 19