Unterteilen einer einzelnen Spalte in mehrere Beobachtungen mit R

7

Ich arbeite an HCUP-Daten und dies hat Wertebereiche in einer einzelnen Spalte, die in mehrere Spalten aufgeteilt werden müssen. Unten ist der HCUP-Datenrahmen als Referenz:

%Vor%

Die gewünschte Ausgabe sollte lauten:

%Vor%

Mein Ansatz für dieses Problem ist die Verwendung des Pakets splatshackshape und die Verwendung dieses Codes

%Vor%

Dieser Ansatz führt zu Speicherproblemen. Gibt es einen besseren Ansatz für dieses Problem?

Einige Kommentare:

  • Die Daten haben viele Buchstaben außer "T".
  • Der Buchstabe kann entweder vorne oder ganz am Ende sein, aber nicht zwischen zwei Zahlen.
  • Es gibt keine Änderung des Buchstabens von "T" nach "U" in einem einzigen Bereich
x1carbon 13.10.2015, 21:50
quelle

5 Antworten

7

Hier ist eine Lösung mit dplyr und all.is.numeric von Hmisc :

%Vor%

Eine Bearbeitung, um Bereiche mit Zeichenwerten zu fixieren. Bringt die Einfachheit ein wenig zurück:

%Vor%

Daten:

%Vor%     
jeremycg 13.10.2015, 23:57
quelle
6

Ursprüngliche Antwort: Siehe unten für das Update.

Zuerst habe ich Ihre Beispieldaten etwas anspruchsvoller gemacht, indem ich die erste Zeile am Ende hinzugefügt habe.

%Vor%

Wir können den Sequenzoperator : verwenden, um die Sequenzen für die Spalte code zu erhalten, die mit tryCatch() umhüllt wird, damit wir einen Fehler vermeiden können, und die Werte speichern, die nicht sequenziert werden können. Zuerst teilen wir die Werte mit dem Bindestrich - und führen es dann durch lapply() .

%Vor%

Wir versuchen, den Sequenzoperator : auf jedes Element von strsplit() anzuwenden, und wenn x[1]:x[2] nicht möglich ist, werden nur die Werte für diese Elemente zurückgegeben und andernfalls die Sequenz x[1]:x[2] . Dann replizieren wir einfach die Werte der Spalte label basierend auf den resultierenden Längen in xx , um die neue Spalte label zu erhalten.

Update: Hier ist, was ich als Antwort auf Ihre Bearbeitung gefunden habe. Ersetzen Sie xx oben durch

%Vor%

Ja, es ist kompliziert. Nun, wenn wir den folgenden Datenrahmen df2 als Testfall nehmen

%Vor%

und führen Sie den xx Code von oben auf es aus, wir können das folgende Ergebnis erhalten.

%Vor%     
Rich Scriven 14.10.2015 01:27
quelle
3

Erstellen Sie eine Sequenzregel für solche Codes:

%Vor%

Mit @ Jeremycgs Beispiel:

%Vor%

was

ergibt %Vor%

Daten kopiert von @ jeremycg's Antwort:

%Vor%     
Frank 14.10.2015 18:33
quelle
3

Wenn du geduldig genug bist, würdest du die Strings wahrscheinlich in einzelne Teile zerlegen anstatt in den eval / parse-Trick, ach nein, also:

%Vor%

Wenn unklar ist, was das oben beschriebene tut - führen Sie einfach die sub -Befehle nacheinander in einem der "code" -Strings aus.

    
eddi 14.10.2015 22:10
quelle
1

Eine weniger elegante Art, es zu tun:

%Vor%     
Cotton.Rockwood 14.10.2015 00:57
quelle