【问题标题】:delete parts of a matrix in R删除R中矩阵的一部分
【发布时间】:2011-02-01 14:37:29
【问题描述】:

我更改了我的问题以使我的问题更加明显:

你好, 我不知道如何在 R 中删除部分矩阵:

例如

x <- matrix(c(1,2,3,4,5,6,7,8,9), nrow = 3)

现在我想删除子矩阵x[2,1:2],这样最终的矩阵(类似于excel中的“删除单元格并向上移动”)类似于

1  4  7
3  6  8
NA NA 9.

感谢您的帮助!

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    首先将要保留的单元格移动到第二行。

    x[2,1:2] <- x[3,1:2]
    

    然后将你想丢失的设置为NA

    x[3,1:2] <- NA
    

    或者,一步,

    x[2:3, 1:2] <- x[c(3,NA), 1:2]
    

    结果,无论哪种方式:

    > x
         [,1] [,2] [,3]
    [1,]    1    4    7
    [2,]    3    6    8
    [3,]   NA   NA    9
    

    执行此操作的基本功能可能如下所示

    excelremoveup <- function(mat, rows, cols) {
      keep <- which(!(1:nrow(mat)) %in% rows)
      keep <- c(keep, rep(NA, nrow(mat)-length(keep)))
      mat[, cols] <- mat[keep, cols]
      mat
    }
    

    你可以这样称呼它。

    excelremoveup(x,2,1:2)
    

    【讨论】:

      【解决方案2】:

      矩阵的索引从上到下,从左到右。您可以将所需的任何子矩阵设置为 NA:

      > x[1:2,1:2] <- NA
      > x
           [,1] [,2] [,3]
      [1,]   NA   NA    7
      [2,]   NA   NA    8
      [3,]    3    6    9
      

      【讨论】:

        【解决方案3】:

        您也可以使用data.entry() 来编辑矩阵,类似于excel:

        x <- matrix(c(1,2,3,4,5,6,7,8,9), nrow = 3)
        data.entry(x)
        

        只需双击您要删除的号码并将其删除。但是,我永远不会推荐这个过度索引,因为 a.它需要手动输入和 b.你没有学会以这种方式使用 R。

        我假设您是 R 新手?您可能需要通读其中一本手册。这是我一开始就喜欢的:

        http://cran.r-project.org/doc/contrib/Paradis-rdebuts_en.pdf

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-23
          • 2021-01-16
          • 2019-12-27
          • 2021-05-02
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          相关资源
          最近更新 更多