2011-01-11 20 views
0

Ich habe drei gleichgroße Datenrahmen, die ich in einer bestimmten Reihenfolge zusammenführen möchte, damit ich dann write.table verwenden kann, um eine formatierte Textdatei für die Verwendung in einem anderen Programm zu erstellen.R Datenrahmen in bestimmter Reihenfolge zusammenführen

Ich möchte dies:

dataframeA_col1 dataframeB_col1 dataframeC_col1 dataframeA_col2 dataframeB_col2 dataframeC_col2 etc ...

Nicht dies: dataframeA_col1 dataframeA_col2 dataframeB_col1 dataframeB_col2

Ich begann die Schleife unter denen aber nur funktioniert, zu schreiben gibt mir die ersten 3 Spalten. Wie kann ich diese Schleife reparieren oder gibt es einen besseren Ansatz?

temp <- c() 
for(i in length(dataframeA)){ 
temp <- cbind(temp, dataframeA[,i], dataframeB[,i], dataframeC[,i]) 
i <- i+1 
} 

Antwort

3

Sicher, hier ist eine Schleife lose Art und Weise:

dfA <- data.frame(col1 = 1:4, col2 = 1:4, col3 = 1:4) 
dfB <- dfA 
dfC <- dfA 
colSeq <- c (matrix(1 : (3*ncol(dfA)), 3, ncol(dfA), byrow = TRUE)) 

wo colSeq gewünschte Spaltenreihenfolge ist:

> colSeq 
[1] 1 4 7 2 5 8 3 6 9 

und jetzt diesen colSeq die Spalten von cbind(dfA,dfB,dfC) neu zu ordnen:

> cbind(A = dfA, B = dfB, C = dfC)[, colSeq ] 
    A.col1 B.col1 C.col1 A.col2 B.col2 C.col2 A.col3 B.col3 C.col3 
1  1  1  1  1  1  1  1  1  1 
2  2  2  2  2  2  2  2  2  2 
3  3  3  3  3  3  3  3  3  3 
4  4  4  4  4  4  4  4  4  4 
+0

Sehr schöne Antwort, viel einfacher und eleganter als mein ursprünglicher Ansatz. – Stedy

+1

Danke ... beachten Sie die leichte Bearbeitung in der 'colSeq' Matrix - verwenden Sie' ncol (dfA) 'für die Anzahl der Spalten der Matrix (allgemeiner). –

Verwandte Themen