Nehmen wir an, ich habe einen Vektor von Variablen wie folgt:
%Vor%und ich möchte das in einen Datenrahmen wie folgt umwandeln:
%Vor%Zu diesem Zweck habe ich die colsplit-Funktion von reshape2 verwendet. Es bedarf eines Musters, um die Saite zu teilen, aber ich merke schnell, dass es kein offensichtliches Muster gibt, um die zwei Charaktere ohne Platz zu teilen. Ich habe versucht "" und erhielt folgende Ergebnisse:
%Vor%Ich habe auch einen Lookbehind- oder Lookahead-regulären Ausdruck versucht:
%Vor%aber es gab mir den obigen Fehler. Wie kann ich dieses Problem lösen?
Irgendwo entlang der Linie begann das "stringr" -Paket (das mit "reshape2" importiert wurde und für die Aufteilung verantwortlich ist, die mit colsplit
stattfindet), "stringi" für einige seiner Funktionen zu verwenden. Einige Verhaltensweisen scheinen sich deswegen verändert zu haben.
Mit dem aktuellen "reshape2" (und dem aktuellen "stringr" -Paket) funktioniert colsplit
so, wie Sie es mit Ihrem Code erwartet hätten:
Wenn ein Muster in Ihrer "Variable" gefunden werden kann, aber kein sauberes Trennzeichen vorhanden ist, fügen Sie eins hinzu:)
%Vor% Mein "splitstapshape" -Paket hat eine nicht-exportierte Hilfsfunktion namens NoSep
, die dafür verwendet werden kann:
Das "tidyverse" (speziell das "tidyr" -Paket) hat einige praktische Funktionen, um Werte in verschiedene Spalten aufzuteilen: separate
und extract
. separate
hat bereits von jazzuro demonstriert , aber die Lösung ist sehr spezifisch für dieses spezielle Problem. Außerdem funktioniert es im Allgemeinen besser mit einem Begrenzer. extract
erwartet, dass Sie einen regulären Ausdruck mit den Gruppen angeben, die Sie erfassen möchten:
Eine neue Funktion tstrsplit()
wurde in data.table v1.9.5
eingeführt. Das t
steht für transponieren . Es ist das Ergebnis des Teilens eines Zeichenvektors mit strsplit()
und dann transponieren es.
Verwenden von tstrsplit()
:
Ja, so einfach ist es. : -)
Sie könnten einfach strsplit
Anstatt t
zu verwenden, können Sie rbind
verwenden und dann wie folgt data.frame
erzwingen:
Basierend auf dem Kommentar von @Justin schlage ich Folgendes vor (mit v <- c("A1", "B2")
):
Der Vektor nach '' 'wählt die Elemente aus dem Teilvektor aus. Also habe ich nur einmal geteilt und beide Gegenstände behalten. Vielleicht ist dies noch einfacher, wenn Sie jeden Gegenstand behalten möchten:
%Vor%