Kann fread
aus" data.table "gezwungen werden, "."
als sep
Wert zu verwenden?Verwenden von sep = "." in `fread` von" data.table "
Ich versuche fread
zu verwenden, um meine concat.split
Funktionen in "splitstackshape" zu beschleunigen. Siehe this Gist für den allgemeinen Ansatz, den ich nehme, und this question für warum ich den Schalter machen möchte.
Das Problem, das ich in renne, behandelt einen Punkt ("."
) als Wert für sep
. Immer wenn ich das mache, bekomme ich einen "unerwarteten Charakter" -Fehler.
Das folgende vereinfachte Beispiel veranschaulicht das Problem.
library(data.table)
y <- paste("192.168.1.", 1:10, sep = "")
x1 <- tempfile()
writeLines(y, x1)
fread(x1, sep = ".", header = FALSE)
# Error in fread(x1, sep = ".", header = FALSE) : Unexpected character (
# 192) ending field 2 of line 1
Die Abhilfe, die ich in meiner jetzigen Funktion ist "."
mit einem anderen Charakter zu ersetzen, die hoffentlich nicht in den ursprünglichen Daten sind, sagt "|"
, aber das scheint mich riskant, da kann ich nicht vorhersagen, was in ist jemandes Datensatz. Hier ist die Problemumgehung in Aktion.
x2 <- tempfile()
z <- gsub(".", "|", y, fixed=TRUE)
writeLines(z, x2)
fread(x2, sep = "|", header = FALSE)
# V1 V2 V3 V4
# 1: 192 168 1 1
# 2: 192 168 1 2
# 3: 192 168 1 3
# 4: 192 168 1 4
# 5: 192 168 1 5
# 6: 192 168 1 6
# 7: 192 168 1 7
# 8: 192 168 1 8
# 9: 192 168 1 9
# 10: 192 168 1 10
Für die Zwecke dieser Frage annehmen, dass die Daten ausgeglichen sind (jede Zeile die gleiche Anzahl von „sep
“ Zeichen). Ich bin mir bewusst, dass die Verwendung einer "."
als Trennzeichen nicht die beste Idee ist, aber ich versuche nur zu erklären, was andere Benutzer in ihren Datensätzen haben könnten, basierend auf otherquestionsI've answered hier auf SO.
Ich habe nicht viel auf die Quelle für 'fread' geschaut, also nicht das Offensichtliche zu fragen, aber hast du versucht, das' \\. 'Zu entkommen? –
@RicardoSaporta, ja. Sie erhalten einen Fehler: 'Fehler in fread (x1, sep =" \\. ", Header = FALSE): 'sep' muss 'auto' oder ein einzelnes Zeichen 'sein. – A5C1D2H2I1M1N2O1R2T1
Das habe ich gerade nach meinem Kommentar bemerkt. hmmm ... ich habe keine Ahnung. Vielleicht kann @MattDowle reinhören? –