2017-09-13 116 views
0

我有以下形式的矩阵,转化NA到中的R矩阵的特定阵列

mat <- matrix(1:25, 5,5) 

,看起来像以下:

enter image description here

现在,我需要改造这矩阵的形式如下图所示:

enter image description here

也就是说,我想保留第2行和第4行以及第2列和第4列的所有元素,并用NA代替所有其他值。这只是一个简单的例子来解释这个问题。我的实际矩阵大小约为2000 X 2000.任何帮助将不胜感激。

回答

1

您的第一个和第二个矩阵是不同的,因为第一个矩阵填充为R将填充矩阵(即列 - 主阶),第二个矩阵是行 - 主要。

假设你的意思是具有相同的矩阵,你的任务可以用简单的矩阵运算来解决:

mat <- matrix(1:25, 5,5) 
mat2 <- matrix(NA, 5,5) 
mat2[c(2,4),] <- 1 
mat2[,c(2,4)] <- 1 
mat * mat2 
    [,1] [,2] [,3] [,4] [,5] 
[1,] NA 6 NA 16 NA 
[2,] 2 7 12 17 22 
[3,] NA 8 NA 18 NA 
[4,] 4 9 14 19 24 
[5,] NA 10 NA 20 NA 

如果没有,只是转你的初始矩阵t(mat),并按照同样的方法同上。

+0

谢谢。你是对的。我的意思是有相同的矩阵。 – smk

+0

而不是c(2,4)如果我有一个数据集数据$数字,它会工作吗? – smk

+0

您可以为列和行的indeces使用一个已命名的向量。例如'sel_rows < - c(2,4)'然后'mat2 [sel_rows,] < - 1' 所以你只想用位置索引向量来表示数字的数据集。 – dshkol

0
mat = t(mat) 
replace(x = mat, which((matrix(row(mat) %in% c(2, 4), NROW(mat), NCOL(mat)) | 
           matrix(col(mat) %in% c(2, 4), NROW(mat), NCOL(mat))) == FALSE, 
           arr.ind = TRUE), NA) 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] NA 2 NA 4 NA 
#[2,] 6 7 8 9 10 
#[3,] NA 12 NA 14 NA 
#[4,] 16 17 18 19 20 
#[5,] NA 22 NA 24 NA 
+0

这也适用。谢谢。但是,而不是c(2,4)如果我有一个数据集数据$数字,它会工作吗? – smk