2016-12-12 6 views
0

Zum Beispiel entrollen, habe ich eine Matrix:wie eine Matrix, in R

 [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 5 6 7 8 
[3,] 9 10 11 12 
[4,] 13 14 15 16 

ich es will

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] 
[1,] 1 2 3 4 5 6 7 8 
[2,] 9 10 11 12 13 14 15 16 

Dank werden.

+5

Let's A' die ursprüngliche Matrix sein, können Sie 'Matrix (t (A), nrow = 2, byrow = TRUE) verwenden' –

+0

Was ist die Logik zum Abrollen? 2 Reihe sollte als 1 gemacht werden? –

+0

@ ZheyuanLi Okay dann. – akrun

Antwort

1

Lassen Sie mich auf Zheyuan Lis Antwort erweitern, da diese Dinge ein wenig geheimnisvoll für den Laien sein können. Grundsätzlich kann dieselbe matrix-Funktion, die zum Erstellen einer Matrix aus einem Vektor verwendet wird, auch zum Umformen einer Matrix verwendet werden.

All man erkennen muss, ist, dass eine Matrix ähnlich wie ein Vektor ist, aber mit einem $dim Attribut für seine Form, und daß die Werte dieser zugrunde liegenden Vektors werden durch Spalte gespeichert.

Ihre ursprüngliche Matrix zu erstellen, könnten Sie tun:

A <- matrix(1:16, nrow=4, byrow=TRUE) 
print(attributes(A)) 

Das byrow Argument sagen matrix die Elemente des Eingangsvektors in einer Art und Weise zeilenweise an die Matrix zu verteilen, statt spalten. Es ändert jedoch nicht die Tatsache, dass nach dieser Zuordnung die interne Speicherung von Werten in der Matrix immer noch nach Spalten erfolgt. Das byrow Argument hat dann einfach die Reihenfolge der Elemente in dem zugrunde liegenden Vektor geändert, wie leicht zu sehen sind:

print(as.numeric(A)) 

Was müssen wir die gewünschte Ausgabe erhalten, ist es, zuerst die Reihenfolge in der Matrix, die durch Spalte bestellt zu erhalten - so dass der zugrunde liegende Vektor wieder 1:16 ist. Dazu können wir die Transponierfunktion t() verwenden. Nach der Transponierung können wir die nun schön geordneten Werte zeilenweise in die gewünschte 2x8-Form bringen. Also:

B <- matrix(t(A), nrow=2, byrow=TRUE) 
print(B)