teilt Zeichen in zwei Variablen im Datenrahmen auf

8

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?

    
Alby 24.04.2013, 15:14
quelle

9 Antworten

7

substr ist ein anderer Weg, es zu tun.

%Vor%     
Jilber Urbina 24.04.2013, 15:24
quelle
9

Aktualisierung: 24. Dezember 2017

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:

%Vor%

Original Antwort: 24. April 2013

Wenn ein Muster in Ihrer "Variable" gefunden werden kann, aber kein sauberes Trennzeichen vorhanden ist, fügen Sie eins hinzu:)

%Vor%

Zusätzliche Optionen: 23. Dezember 2017

Mein "splitstapshape" -Paket hat eine nicht-exportierte Hilfsfunktion namens NoSep , die dafür verwendet werden kann:

%Vor%

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:

%Vor%     
A5C1D2H2I1M1N2O1R2T1 24.04.2013 16:26
quelle
5

Sie können substr verwenden, um es zu teilen:

z.B.

%Vor%     
user1317221_G 24.04.2013 15:24
quelle
5

Wenn Sie einen Datenrahmen mit dem Vektor variable erstellen, könnten Sie jetzt separate() aus dem Paket tidyr verwenden.

%Vor%     
jazzurro 04.02.2015 05:55
quelle
4

Eine andere Lösung, die regulären Ausdruck verwendet

%Vor%     
dickoa 24.04.2013 15:28
quelle
4

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.

%Vor%

Verwenden von tstrsplit() :

%Vor%

Ja, so einfach ist es. : -)

    
Rich Scriven 04.02.2015 08:34
quelle
3

Sie können substring () verwenden, um Vektoren zu erstellen und sie dann mit der Funktion data.frame zu verbinden.

%Vor%     
Arhopala 24.04.2013 15:26
quelle
2

Sie könnten einfach strsplit

verwenden %Vor%

Anstatt t zu verwenden, können Sie rbind verwenden und dann wie folgt data.frame erzwingen:

%Vor%     
Simon O'Hanlon 24.04.2013 15:21
quelle
1

Basierend auf dem Kommentar von @Justin schlage ich Folgendes vor (mit v <- c("A1", "B2") ):

%Vor%

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%     
U. Windl 11.04.2017 11:25
quelle

Tags und Links