cSplit-Bibliothek (splitstackshape) löscht immer die Spalte

8

Ich suchte nach einer Möglichkeit, den Spalteninhalt durch ein Trennzeichen aufzuteilen und eine Tabelle in ein langes Format umzuwandeln. Ich habe cSplit aus dem Paket splitstackshape gefunden und es macht fast das, wonach ich gesucht habe.

Problem ist jetzt mit der Option drop . Ich habe erwartet, dass meine Split-Spalte in gewisser Weise kopiert wird, aber das passiert nicht. Mache ich es falsch? Jemand hat das Problem erlebt?

Ich bin mir nicht sicher, ob ich etwas falsch mache, aber die Option drop = FALSE funktioniert in meinem Fall nicht.

Hier ist ein Beispiel:

%Vor%

Was ich erwartet habe, war so etwas:

%Vor%

Ich verwende Version 1.4.2

    
drmariod 13.05.2015, 06:45
quelle

2 Antworten

10

Das Format "long" ändert die Spalte mit list(unlist(...)) in "data.table", zugewiesen mit := . Wenn also drop verwendet würde, würden Sie die Spalte aufteilen und dann entfernen!

Ich werde versuchen, es in der Dokumentation explizit zu machen, dass drop nur für das wide -Format ist, oder fügen Sie message hinzu, wenn ein Benutzer versucht, drop im langen Format zu verwenden. Fühlen Sie sich frei, einen FR einzureichen oder einen PR einzureichen .

Die Umgehungslösung würde darin bestehen, eine andere Spalte (zB "a_orig") zuzuweisen und dann die Aufteilung durchzuführen:

%Vor%

Ich habe nicht ausführlich getestet, aber eine mögliche Lösung könnte sein:

%Vor%

Die Grundidee besteht darin, das Eingabe-Dataset nur zu ändern, wenn direction == "wide" und drop = FALSE . Dies ähnelt der Idee, die Sie hatten, aber kann möglicherweise die Lösung sein, die in das eigentliche Paket integriert ist, irgendwo um Zeile 94 . In diesem Fall sollte nur der indt[, ':='(eval(paste(splitCols, "orig", sep = "_")), lapply(splitCols, function(x) indt[[x]]))] -Teil notwendig sein.

    
A5C1D2H2I1M1N2O1R2T1 13.05.2015, 07:00
quelle
0

Danke für das Feedback, ich habe eine kleine Funktion als Workaround geschrieben. Ich musste data.table in data.frame ändern, damit es richtig funktioniert. Im Fall von data.table muss ich einen zusätzlichen Parameter setzen, der jedoch mit data.frame abstürzt. In meinem Fall brauche ich die meiste Zeit data.frame , also habe ich es dafür optimiert.

%Vor%     
drmariod 13.05.2015 07:29
quelle

Tags und Links