sqldf大整数(INT64)

时间:2014-02-25 02:37:48

标签: r sqldf int64

我有一个巨大的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列应该被视为字符串?

1 个答案:

答案 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