2013-02-15 15 views
8

Ich habe eine Reihe von Vektoren V_1, V_2, ..., V_n, die ich in eine Matrix konvertieren möchte. Jeder Vektor wird zu einem Spaltenvektor in der Matrix. Die Größe jedes Vektors ist gleich. Gibt es dafür eine einfache Funktion? Im Matrixabschnitt von The R Book scheint diese Funktion nicht vorhanden zu sein.Spalte Vektoren zu Matrix in R

Was ich momentan tue, ist:

mat=matrix(c(V1, V2, ..., VN), nrow=length(V1)) 
  1. Gibt es irgendeine Art von Matrix Anfügen Funktion Spalten auf das Ende einer Matrix hängen?

EDIT: Das Endziel ist es, ein k-means Clustering mit dieser Matrix durchzuführen. Die Namen meiner Vektoren sind nicht wirklich V_1, V_2, ..., V_n. Die Namen der Vektoren sind Teilstrings, die dem Dateinamen entsprechen, aus dem die Daten stammen (dies ist eine 1-1-Karte). Schließlich werde ich über alle Dateien in einem bestimmten Verzeichnis iterieren, die Daten in einen Vektor extrahieren und dann jeden Spaltenvektor an eine Matrix anhängen.

+0

Gibt es einen Reim oder einen Grund, wie Ihre Vektoren benannt werden, sind sie buchstäblich V1 ... VN? Die andere Lösung wäre hier cbind, aber Sie müssen immer noch jeden einzelnen Ihrer Vektoren benennen. – russellpierce

+0

Meine Vektoren haben keinen Namen $ V_1, \ ldots, V_n $, aber es gibt einen gewissen Reim oder einen Grund für die Namen meiner Vektoren, da sie Teilstrings des Dateinamens sind, aus dem die Daten stammen. – CodeKingPlusPlus

+0

FYI, Ihre Datenstruktur und die gewünschte Struktur sind ziemlich einfach und leicht zu beschreiben, ohne statistisches Verständnis zu erfordern. Ihre Frage könnte daher besser auf Stackoverflow gestellt werden. Für jetzt müssen Sie nichts tun. Wenn genügend andere Community-Mitglieder meiner Einschätzung zustimmen, wird sie migriert. – russellpierce

Antwort

8

Ein Befehl, der für Sie arbeiten kann, ist: sapply(ls(pattern="V[[:digit:]]"),get) Wenn das Argument in Muster ist ein regulärer Ausdruck, dass die Vektoren entspricht, die Sie wollen (und nur die Vektoren Sie möchten). Da die Vektoren aus einer Teilzeichenfolge einiger Dateinamen benannt werden, nehme ich an, dass Sie einen Zeichenvektor mit jedem Vektornamen als Element erstellen können. Wenn dies der Fall ist, können Sie den Befehl ls durch diesen Vektor ersetzen.

Bearbeiten: Matrix anhängen von Spalte wäre Cbind (Spaltenbindung). Zum Beispiel:

V1 <- rnorm(20) 
V2 <- rnorm(20) 
V3 <- rnorm(20) 
mat <- matrix(c(V1,V2),nrow=length(V1)) 
(mat.app <- cbind(mat,V3)) 
+0

'(mat.app <- cbind (mat, V3))' funktioniert, wenn ich es auf einem Vektor ausführen, aber wenn ich es in der Regel in einer Schleife anwenden Matte ändert sich nicht. Irgendwelche Ideen? – CodeKingPlusPlus

+0

Nun ... was sich ändert, ist mat.app nicht mat. In Ihrer Schleife müssen Sie also sicherstellen, dass Sie die neue Matte unter dem Namen speichern, den Sie später in cbind als Argument verwenden. Z.B. mat <- cbind (mat, VectorToAdd) – russellpierce

+4

Sie können 'do.call (" cbind ", lapply (ls (pattern =" V [[: digit:]] ")), um den letzten Schritt zu automatisieren 'cbind'-ing die Vektoren. – caracal