2016-05-17 8 views
-1

Ich versuche, eine große dünn besetzte Matrix (Dimension: 4445 x 2621) in eine Identitätsmatrix zu konvertieren. Die Zeilen- und Spaltennamen sind Zeichenfolgen. Die Idee ist, alle Werte, die 1 sind und oben sollte auf 1Ersetzen Sie Werte in einer großen Matrix in R, um eine Identitätsmatrix zu erstellen

Eg gleich:

Mat = [5,0,1 
     10,11,0 
     3,0,0] 

wird geworden,

[1,0,1 
1,1,0 
1,0,0] 

Der Code, den ich verwendet, ist

B[B >= 1] = 1 

Ich habe auch Folgendes verwendet:

B = replace(B,B>=1, 1) 

und

> typeof(B) 
[1]"character" 

Ich versuchte, es als as.numeric(B) Ändern der Zeichenwert in numerische zu konvertieren, aber das macht es nur eine große numerische. Ich bin sicher, es ist, weil die Werte Zeichen sind. Bitte weisen Sie mich auf den Fehler hin.

+4

Bitte geben Sie eine reproduzierbares Beispiel mit * gültiger * Syntax. – nrussell

+2

Wenn es * als dünne Matrix dargestellt wird (d. H. Über 'Matrix()' aus dem 'Matrix'-Paket), sollte etwas wie 'M @ x [M @ x> = 1] <- 1' funktionieren. –

Antwort

-1
storage.mode(B) = "numeric" 
B[B>=1] = 1 
B[B<1] = 0 
+0

Danke. Das hat den Job am besten gemacht. –

0

Sie müssen nur den Bereich der Teilmenge, auf die Sie wollen, wie dies mit der Bedingung „größer als 0“ zuweisen:

Mat = rbind(c(5,0,1),c(10,11,0),c(3,0,0)) 
Mat1 <- Mat 
Mat1[Mat > 0] <- 1 

Ergebnis:

Mat1 
    [,1] [,2] [,3] 
[1,] 1 0 1 
[2,] 1 1 0 
[3,] 1 0 0