【问题标题】:Splitting a matrix row based拆分基于行的矩阵
【发布时间】:2019-04-07 16:35:33
【问题描述】:

我有一个关于划分矩阵的问题。

我有 100 行和 1024 列的数据。我想将该矩阵拆分为 2 个子矩阵,以便矩阵 1 为 8 行,矩阵 2 为 2 行

将形成第一个矩阵

r1
r2
r3
r4
r5
r6
r7
r8
r11
r12
r13
...
...

第二个矩阵将形成

r9
r10
r19
r20
...
...

【问题讨论】:

    标签: r matrix split divide


    【解决方案1】:

    一种选择是使用rep 创建一个逻辑索引,然后将其用于split matrix 的行序列,根据list 中的索引向量对matrix 进行子集化

    out <-lapply(split(seq_len(nrow(m1)), rep(rep(c(TRUE, FALSE), c(8, 2)), 
                length.out = nrow(m1))), function(i) m1[i, ] )
    

    此外,正如 cmets 中提到的 @user20650,?split.data.frame 也可以用于矩阵(基于文档)

    数据框方法也可用于将矩阵拆分为矩阵列表,替换形式同样适用,前提是显式调用它们。

    out1 <- split.data.frame(m1, rep(rep(c(TRUE, FALSE), c(8, 2)), 
              length.out = nrow(m1)))
    

    数据

    set.seed(24)
    m1 <- matrix(rnorm(100 * 1024), nrow = 100, ncol = 1024)
    

    【讨论】:

    • @user20650 太好了,我在考虑split.default`,然后认为我必须将矩阵转换为 data.frame 才能做到这一点
    • 它的工作原理比我的“for”循环快得多,但我还有最后一个问题;有没有办法在没有标题的情况下形成“出”矩阵?
    • @Erdem 你的意思是每个矩阵的列名吗?
    【解决方案2】:

    可能最简单的方法是定义索引,然后对矩阵进行子集化:

    idx10 <- 1:10*10 # contains 10, 20, 30, ..., 100
    idx9 <- idx10 - 1 #contain 9, 19, 29, ..., 99
    
    idx <- c(idx9, idx10)
    
    a <- matrix(rnorm(200), nrow = 100)
    
    a_910 <- a[idx,]
    a_rest <- a[-idx]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-16
      • 2019-11-04
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多