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:
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()
.
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
Ja, es ist kompliziert. Nun, wenn wir den folgenden Datenrahmen df2
als Testfall nehmen
und führen Sie den xx
Code von oben auf es aus, wir können das folgende Ergebnis erhalten.
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.
Tags und Links r data.table medical data-cleaning splitstackshape