Spaltenspaltenelemente in einer Zeile innerhalb eines Datenrahmens aufteilen

7

Ich habe eine Matrix (1000 x 2830) wie folgt:

%Vor%

und ich möchte Folgendes erhalten (doppelte Spaltennamen und Spalten jedes Elements jeder Spalte):

%Vor%

Ich habe versucht, strsplit zu verwenden, aber ich habe Fehlermeldungen erhalten, weil dies eine Matrix und keine Zeichenfolge ist. Könnten Sie mir bitte einige Ideen zur Lösung dieses Problems geben?

    
July 19.02.2015, 13:15
quelle

4 Antworten

7

Hier ist eine Option, die dplyr (für bind_cols ) und tidyr (für separate_ ) zusammen mit lapply von Basis R verwendet. Es geht davon aus, dass Ihre Daten ein data.frame sind um es zuerst in data.frame zu konvertieren):

%Vor%     
docendo discimus 19.02.2015, 13:42
quelle
6

Ich bin voreingenommen, aber ich würde empfehlen, cSplit aus meinem "splitstapshape" -Paket zu verwenden. Da es scheint, dass Sie in Ihrer Eingabe rownames haben, verwenden Sie as.data.table(., keep.rownames = TRUE) :

%Vor%

Weniger lesbar als cSplit (aber momentan wahrscheinlich schneller) wäre stri_split_fixed von "stringi" zu verwenden, wie folgt:

%Vor%

Wenn Geschwindigkeit wichtig ist, würde ich vorschlagen, das Paket "iotools" zu überprüfen, insbesondere die Funktion mstrsplit . Der Ansatz wäre ähnlich dem "Stringi" -Ansatz:

%Vor%

Sie müssen möglicherweise lapply(mydf, as character) hinzufügen, wenn Sie stringsAsFactors = FALSE bei der Konvertierung von matrix in data.frame vergessen haben, aber es sollte immer noch die stri_split -Methode übertreffen.

    
A5C1D2H2I1M1N2O1R2T1 19.02.2015 14:53
quelle
4

Etwas, das Sie tun können, obwohl es ein wenig "verdreht" erscheint ( yourmat ist Ihre Matrix) ...:

%Vor%

Bearbeiten
Wenn Sie möchten, dass die row.names von res die gleiche ist wie in yourmat , können Sie Folgendes tun:

%Vor%

Hinweis: Wenn yourmat ein data.frame anstelle von matrix ist, muss die Funktion as.vector in der ersten Zeile in% co_de geändert werden %.

    
Cath 19.02.2015 13:44
quelle
2

Basis-R-Lösung ohne Verwendung von Datenrahmen:

%Vor%

[Aktualisieren] Hier ist eine kleine Benchmarking-Studie der vorgeschlagenen Lösungen (ich habe die Lösung cSplit nicht mit einbezogen, weil sie zu langsam war):

Einrichtung:

%Vor%

Ergebnisse:

%Vor%

In der aktualisierten Benchmark ist der Gewinner f.mstrsplit .

    
Marat Talipov 19.02.2015 15:07
quelle

Tags und Links