「 data.table fread
」から強制的に値"."
として正常に使用できsep
ますか?
「splitstackshape」で関数fread
を高速化するために使用しようとしています。私が採用している一般的なアプローチについては、この Gistを参照してください。切り替えを行う理由については、この質問を参照してください。concat.split
私が直面している問題は、ドット ( "."
) を の値として扱うことですsep
。そうするたびに、「予期しない文字」エラーが発生します。
次の単純化された例は、問題を示しています。
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
現在の関数で使用している回避策は"."
、元のデータには存在しないことが望ましい別の文字、たとえば"|"
で置き換えることですが、他の誰かのデータセットに何があるかを予測できないため、危険に思えます。これが実際の回避策です。
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
この質問では、データのバランスが取れていると仮定します (各行には同じ数の " sep
" 文字が含まれます)。セパレーターとして aを使用することは最善のアイデアではないことは承知していますが、ここ SO で回答した他の質問"."
に基づいて、他のユーザーがデータセットに持っている可能性があるものを説明しようとしています。