使用R将数组拆分为更小的数组

时间:2017-07-07 13:50:03

标签: arrays r split

我有一个奇数行,2435行的一维数组。我想将数组拆分成更小的数组,每次都进行一次小测试。

首先,我想将大数组拆分成两个较小的数组。

然后我想将我的数组分成4个较小的数组,然后分成8个小数组,依此类推。

任何人都可以帮忙吗?

以下是一个例子:

  

A< -1:2435

     

A1   1,2,3,4,...,1237

     

A2   1238,1239,...,2435

提前致谢

2 个答案:

答案 0 :(得分:0)

为什么不简单地使用split()功能?例如(使用奇数长度将返回警告,但没关系):

split(x = 1:11, f = 1:2) # to split into 2 distinct list elements
#$`1`
#[1]  1  3  5  7  9 11
#
#$`2`
#[1]  2  4  6  8 10

split(x = 1:11, f = 1:4)
#$`1`
#[1] 1 5 9
#
#$`2`
#[1]  2  6 10
#
#$`3`
#[1]  3  7 11
#
#$`4`
#[1] 4 8

如果你真的热衷于分裂为2,然后再分为2,你可以随时使用lapply()函数,该函数适用于列表的每个元素:

lapply(split(x = 1:11, f = 1:2), split, f = 1:2)
#$`1`
#$`1`$`1`
#[1] 1 5 9
#
#$`1`$`2`
#[1]  3  7 11
#
#
#$`2`
#$`2`$`1`
#[1]  2  6 10
#
#$`2`$`2`
#[1] 4 8

嵌套结构有点痛苦,但还有其他方法可以解决这个问题,例如:

L <- split(x = 1:11, f = 1:2) # the main (first) split
names(L) <- letters[1:length(L)] # names the main split a and b
LL <- lapply(L, split, f = 1:2) # split the main split
unlist(LL, recursive = F)
#$a.1
#[1] 1 5 9
#
#$a.2
#[1]  3  7 11
#
#$b.1
#[1]  2  6 10
#
#$b.2
#[1] 4 8

答案 1 :(得分:0)

如果要将数据拆分到数组的中间,还可以使用split函数:

a <- 1:2435

divide <- function(x, n = 2)
{
  i <- ceiling(length(x)/n)
  split(x,x%/%i+1)

}

divide(a)

并且您可以使用更多部件

divide(a, n = 4)

或者在两次尝试中使用

lapply(divide(a,2),function(x) divide(x,2))

n值越高,由于四舍五入问题,尺寸将不再相等。这保证使用嵌套方法。