2016-07-31 58 views
1

Ich versuche, den maximalen Wert in jeder Zeile in einer Matrix in r zu finden, wenn die Matrix NAs enthält.Finden Sie den maximalen Wert in jeder Zeile in einer Matrix, die NAs enthält

Ich habe versucht, die Funktion rowMax() aus dem "qlcMatrix" -Paket zu verwenden, aber es behandelt nicht NAs (es gibt mir "NA" zurück, wenn die Zeile mindestens einen NA-Wert enthält).

+0

Bitte lesen Sie die Informationen über [wie eine gute Frage] (http://stackoverflow.com/help/how-to-ask) und wie um ein [reproduzierbares Beispiel] zu geben (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Jaap

+2

'library (matrixStats); rowMaxs (x, na.rm = TRUE) ' – Sotos

Antwort

2

Sie können max. Wenn Sie die Zeile als Vektor angeben und max verwenden, stellen Sie sicher, dass Sie na.rm = TRUE gesetzt haben. Hier

ist ein Beispiel unter Verwendung eines Vektors:

> x = c(2,4,6,10,1,5,NA) 

> max(x,na.rm = TRUE) 

[1] 10 

Hier ist ein Beispiel einer Matrix unter Verwendung von:

> x = matrix(1:10,2,5) 
> x 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 7 9 
[2,] 2 4 6 8 10 
> x[2,2] = NA 
> x 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 7 9 
[2,] 2 NA 6 8 10 
> max(x[2,],na.rm = TRUE) 
[1] 10 

Hier ist eine einfache, für die Schleife Demonstration:

for(i in 1:nrow(x)){ 
    y[i] = max(x[i,],na.rm = TRUE) 

} 
> y 
[1] 9 10 
+0

Sie brauchen es für jede Zeile aber ... –

+0

Kein Problem, fügte ich hinzu, ich hatte gedacht, dass sein Problem mehr mit dem Mangel an NA-Unterstützung als die Schleife war. – Alos

+0

Das ist kein guter Weg. 'print' speichert keine Werte, daher ist es nutzlos. –

0

Sotos 'Antwort oben funktioniert. Überprüfen Sie auch die Dokumentation für ‚gelten‘ in der Basis R:

apply(your_matrix, 1, max, na.rm = TRUE)