2016-12-06 26 views
1

我試圖在m矩陣中取'1'的位置,並使用這些位置將k矩陣中的值更改爲NA。但是在嘗試之後我很難得到它。根據列位置更改矩陣中的值

m <- matrix(c(0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1), 
     nrow = 4, byrow = TRUE) 
m 

    [,1] [,2] [,3] [,4] 
[1,] 0 0 0 1 
[2,] 0 1 0 1 
[3,] 1 0 0 0 
[4,] 0 0 1 1 


k <- matrix(c(12, 32, 12, 13, 23, 31, 23, 31, 23, 32, 67,63,61, 22,99, 34), 
     nrow = 4, byrow = TRUE) 
k 

    [,1] [,2] [,3] [,4] 
[1,] 12 32 12 13 
[2,] 23 31 23 31 
[3,] 23 32 67 63 
[4,] 61 22 99 34 

這樣做下面我得到1S的在M矩陣的列位置:

jj<- row(m)[m!=0] 

[1] 3 2 4 1 2 4 

我試了幾種方法,但我奮鬥基礎上,在K矩陣替代值將m個矩陣的行位置分配給NA。

我想達成什麼是以下:

 [,1] [,2] [,3] [,4] 
[1,] 12 32 12 NA 
[2,] 23 NA 23 NA 
[3,] NA 32 67 63 
[4,] 61 22 NA NA 

回答

2

我們可以轉換爲NA與

NA^(m)*k 
#  [,1] [,2] [,3] [,4] 
#[1,] 12 32 12 NA 
#[2,] 23 NA 23 NA 
#[3,] NA 32 67 63 
#[4,] 61 22 NA NA 

或者另一種選擇是

is.na(k) <- m==1 

或用replace

replace(k, m==1, NA) 
+1

是的,這是正確的。非常感謝! – Sam

+1

驚人地簡潔的代碼..超級! –

1

你可以簡單地這樣做:

k[m==1] <- NA