1

我有一个巨大的 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 中读取大整数的任何建议?

我通过将第 5 列指定为字符串来使用扫描作为解决方法。我现在获得了全部价值,但在连接/合并中使用时效率低下。如果读取为字符串是唯一的出路,我可以在 sqldf 中实现这一点吗?sqldf 不支持“what”和“colClasses”。我怎么能提到第 5 列应该被视为字符串?

4

1 回答 1

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
于 2014-04-23T16:21:41.407 回答