将数据拆分为3个有序的块,尽可能接近相等的大小

时间:2016-08-05 13:55:25

标签: r

我想将其拆分为三个块,其大小尽可能相等,这样如果等式 可能,则较早的块比后面的块有更多的条目。

说我有类似的东西:

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或某些已经定义过的东西中实现这一目标?

2 个答案:

答案 0 :(得分:1)

我们将length划分为&#39; x&#39;在使用splitceiling&#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