可以fread
从“data.table”强制成功"."
用作sep
值吗?
我正在尝试使用"splitstackshape"fread
来加速我的concat.split
功能。请参阅此 Gist了解我正在采用的一般方法,以及此问题了解我为什么要进行切换。
我遇到的问题是将点 ( "."
) 视为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 上回答的其他 问题来解释其他用户在他们的数据集中可能有什么。