2011-02-01 95 views
1

我改变了我的问题,使我的问题更加明显:删除部分

您好, 我无法弄清楚如何删除一个矩阵的部分在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. 

感谢您的帮助!

回答

2

矩阵从上到下,从左到右进行索引。你可以设置你想要的任何一个子矩阵到NA:

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

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

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 
} 

你” d这样称呼它。

excelremoveup(x,2,1:2) 
0

您还可以使用data.entry()编辑矩阵的EXCELL样方式:

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