Warum nicht einfach:
%Vor%Alternativ können Sie eine Funktion wie die folgende erstellen (die Verwendung einer Funktion ist mehr für die bequeme Wiederverwendung - nicht notwendig, wenn es nur ein einmaliges Problem ist):
%Vor% Beachten Sie, dass die Verwendung von fixed = TRUE
Ihnen eine gute Geschwindigkeitssteigerung geben wird - Sie sollten dies also auch im "data.table" -Ansatz berücksichtigen.
Schließlich, wie @Jaap vorschlägt, können Sie cSplit
aus meinem "splitstapshape" -Paket verwenden, wie folgt:
Da die Leistung in Anbetracht der Größe Ihrer Daten ein Problem darstellt, möchten Sie möglicherweise die Methode fun
verwenden, in der Sie die "data.table" manuell erstellen.
Hier ist ein Timing für eine größere Version Ihres Vektors:
%Vor%Die Leistung von diesen hängt wahrscheinlich zumindest teilweise von der Anzahl der resultierenden Split-Stücke ab, also dachte ich, ich würde:
fun
mit stringi
Hier sind die neuen Beispieldaten:
%Vor%Hier sind die neuen Funktionen:
%Vor%Und das neue Benchmarking:
%Vor%Wenn Sie die Daten weiter vergrößern, um näher an die Simulation Ihres tatsächlichen Datasets zu kommen, beginnt die Performance wirklich zu konvergieren - mit Ausnahme von "splitstapshape", das sich schrecklich verlangsamt: - (
Hier ist ein Beispiel:
%Vor% An diesem Punkt und unter der Annahme, dass es unwahrscheinlich ist, dass Sie dies wiederholt tun, sollte eine der Optionen ziemlich anständig sein, um sie tatsächlich zu verwenden. Ich war persönlich überrascht, dass stack
alle anderen Optionen übertroffen hat ....
Tags und Links r data.table