2016-07-19 38 views
-2

Ich habe diese Matrix:ersetzen NA einer Matrix mit einigen Werten

mat=matrix(c(1,1,1,2,2,2,3,4,NA, 
       4,4,4,4,4,3,5,6,4, 
       3,3,5,5,6,8,0,9,NA, 
       1,1,1,1,1,4,5,6,1),nrow=4,byrow=TRUE) 
    print(mat) 

     #  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] 
     # [1,] 1 1 1 2 2 2 3 4 NA 
     # [2,] 4 4 4 4 4 3 5 6 4 
     # [3,] 3 3 5 5 6 8 0 9 NA 
     # [4,] 1 1 1 1 1 4 5 6 1 

ich sollte die NA-Werte mit anderen Werten, auf diese Weise ersetzen:
ich eine andere Matrix haben:

mat2=matrix(c(24,1,3,2, 4,4,4,4, 3,2,2,5, 1,3,5,1),nrow=4,byrow=TRUE)

 [,1] [,2] [,3] [,4] 
[1,] 24 1 3 2 
[2,] 4 4 4 4 
[3,] 3 2 2 5 
[4,] 1 3 5 1 

und die Untergruppe mit dem Index der Reihen mit NA der ersten Matrix „mat“:

subset=c(1,3) 

Ich mag die NA der Matrix mit der COLNAMES des Wertes der Zeile mit dem Maximalwert replcace.

in diesem Fall wird I "1" für die erste Zeile und "4" für die dritte, ich kümmern sich nicht um Zeile 2 und 4.

+0

Siehe "max.col", z.B. [hier] (http://stackoverflow.com/questions/8220343/is-there-something-like-a-pmax-index) - 'max.col (mat2 [Teilmenge,]," zuerst ")' –

+0

Ihr 'mat' ist eine Zeichenmatrix. Verwenden Sie "NA" ohne die Anführungszeichen für NA-Werte. – Roland

Antwort

1

verwenden

mat[subset,9] <- apply(mat2[subset,],1,which.max) 
0
mat[which(is.na(mat))] <- apply(mat2,1,max)[which(is.na(mat), arr.ind = T)[1,]] 

Dies sollte jeden NA-Wert durch den maximalen Wert aus der gleichen Zeile in Mat2 ersetzen. Ich habe keinen offenen Kern zum Debuggen, also hoffe ich, dass das funktioniert. Wenn Sie Fragen haben oder es stürzt ab, kommentieren Sie einfach.