fread
可以從「data.table」中強制成功使用"."
作爲sep
的值嗎?使用sep =「。」 「fread」from「data.table」
我試圖使用fread
來加快我在"splitstackshape"中的concat.split
函數。關於我正在採取的一般方法,請參閱this Gist,爲什麼我要進行切換,請參閱this question。
我遇到的問題是將點("."
)當作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
」字符)。我知道使用"."
作爲分隔符並不是最好的想法,但我只是試圖說明其他用戶在其數據集中可能具有的內容,基於SO上的otherquestionsI've answered。
我沒有看過'fread'的源碼,所以不要問明顯,但你有沒有試過逃避'\\。'? –
@RicardoSaporta,是的。你會得到一個錯誤:'fread錯誤(x1,sep =「\\。」,header = FALSE):'sep'必須是'auto'或單個字符。 – A5C1D2H2I1M1N2O1R2T1
我剛剛注意到我的評論後。嗯...我不知道。也許@MattDowle可以插入? –