2017-09-13 52 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