我有一个巨大的csv文件,其中包含一个大整数值的数字列。我在下面有一个示例。
0, 0, 11536375, 0, 1152921504606846976, 75962, 258238559
1, 0, 11536375, 1, 1152921504606846977, 609189, 1515555074
2, 0, 11536375, 2, 1152921504606846978, 609189, 1530344731
我正在尝试将列1,3,5:7读入R数据帧。我决定使用sqldf来提高效率,因为我已经用它来读取其他数据源。问题是sqldf将第5列截断为1.152922e + 18。这更像是我需要与另一个DF加入的索引。所以我需要确切的价值。我认为nrows参数在这里没有帮助。我确实需要读取一个看起来比基本R可以处理的值更高的值。我认为INT64包可能有所帮助,但已存档。关于如何在sqldf中读取大型int的任何建议?
我通过将第5列指定为字符串来将扫描用作解决方法。我现在得到了全部值,但在连接/合并中使用时效率很低。如果以字符串形式读取是唯一的出路,我可以在sqldf中实现这一点吗? sqldf不支持“what”和“colClasses”。我怎么能提到第5列应该被视为字符串?
答案 0 :(得分:0)
试试这个:
library(sqldf)
# create test data
Lines <- "a, b, c, d, e, f, g
0, 0, 11536375, 0, 1152921504606846976, 75962, 258238559
1, 0, 11536375, 1, 1152921504606846977, 609189, 1515555074
2, 0, 11536375, 2, 1152921504606846978, 609189, 1530344731
"
cat(Lines, file = "testFile.dat")
DF <- read.csv.sql("testFile.dat", sql =
"select a, b, c, d, cast(e as text) e, f, g from file")
,并提供:
> DF
a b c d e f g
1 0 0 11536375 0 1152921504606846976 75962 258238559
2 1 0 11536375 1 1152921504606846977 609189 1515555074
3 2 0 11536375 2 1152921504606846978 609189 1530344731