【问题标题】:Split an array into smaller arrays using R使用 R 将数组拆分为更小的数组
【发布时间】:2017-07-07 13:50:03
【问题描述】:

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

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

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

有人可以帮忙吗?

一个例子如下:

A

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

A2 1238, 1239,...,2435

提前致谢

【问题讨论】:

  • 不是很清楚你想要什么。请尝试添加small example。另外,你可以看看这个similar question
  • 我看过那篇文章,但我认为这篇文章只是拆分了数据。拆分后可以保存吗?
  • 尝试将它们存储到list
  • @Gina 你可以试试x <- 1:10; n = 3; x1 <- split(x, sort(x%%n))x1 之类的东西会分裂。然后您可以通过x1[[i]] 访问它们以获取i-th 部分。
  • 谢谢,我确实使用列表功能存储了它们。我从来没有在 R 中编码,所以所有这些对我来说都是新的。感谢您的帮助。

标签: arrays r split


【解决方案1】:

为什么不简单地使用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

【讨论】:

    【解决方案2】:

    如果想通过数组中间拆分数据,也可以使用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 值越大,由于舍入问题,大小将不再相等。这保证了使用嵌套方法。

    【讨论】:

    • 如果我想检查我的数组的尺寸。我试过暗淡,但我得到了NULL。例如。 a
    • a 是一个向量,没有dim 属性,所以你必须使用length(a)
    猜你喜欢
    • 2022-07-07
    • 2022-12-02
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多