【发布时间】: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 中删除部分矩阵:
例如
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.
感谢您的帮助!
【问题讨论】:
首先将要保留的单元格移动到第二行。
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)
【讨论】:
矩阵的索引从上到下,从左到右。您可以将所需的任何子矩阵设置为 NA:
> x[1:2,1:2] <- NA
> x
[,1] [,2] [,3]
[1,] NA NA 7
[2,] NA NA 8
[3,] 3 6 9
【讨论】:
您也可以使用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
【讨论】: