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?
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):
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)
:
Weniger lesbar als cSplit
(aber momentan wahrscheinlich schneller) wäre stri_split_fixed
von "stringi" zu verwenden, wie folgt:
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:
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.
Etwas, das Sie tun können, obwohl es ein wenig "verdreht" erscheint ( yourmat
ist Ihre Matrix) ...:
Bearbeiten
Wenn Sie möchten, dass die row.names
von res
die gleiche ist wie in yourmat
, können Sie Folgendes tun:
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 %.
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
.