Schnellere Methode, um einen Textvektor in eine numerische Matrix / data.frame in R umzuwandeln?

8

Ich verwende R, um einige Server-Logs zu analysieren, die Listen erzeugen, die wie folgt aussehen:

%Vor%

Was ich von ihnen produzieren möchte, ist eine Matrix, die so aussieht:

%Vor%

Sie kommen von der Abfrage eines Datenbankfeldes vom Typ varchar, also glaube ich nicht, dass ich irgendwelche Dateilesetricks verwenden kann.

Ich habe eine Menge davon, Millionen von Reihen gleichzeitig.

Was ich gemacht habe, ist folgendes, es ist ziemlich langsam:

%Vor%

Gibt es einen effizienteren Weg? Ein One-Liner-Regex?

    
Patrick McCarthy 11.12.2014, 22:47
quelle

4 Antworten

8

Sie könnten versuchen, dies mit dem stringi -Paket

zu vektorisieren %Vor%

Benchmarks

%Vor%

    
David Arenburg 11.12.2014, 23:01
quelle
6

1) Ich habe nicht überprüft, wie schnell das ist, aber der Code ist sehr kurz:

%Vor%

wo myLog ist wie in der Frage.

2) Hier ist eine Basislösung:

%Vor%     
G. Grothendieck 11.12.2014 23:13
quelle
4
%Vor%

Als ich das Muster von G_G sah, wurde mir klar, dass die Negation der Ziffer im Aufruf von gsub verwendet werden konnte:

%Vor%     
42- 11.12.2014 23:15
quelle
4

Das scheint ziemlich schnell (~ 2 Sekunden bei einer Million Fällen), aber nicht so schnell wie die stringi Lösung von David:

%Vor%

Benchmarking bei 30K-Fällen (Alle außer den ersten beiden verursachten tatsächlich, dass meine R-Sitzung beim Testen von 1 Million Fällen nicht reagierte):

%Vor%

Schnellste zwei:

%Vor%

Middling:

%Vor%

Langsamer:

%Vor%     
thelatemail 11.12.2014 23:05
quelle

Tags und Links