2014-02-25 65 views
1

我有一個巨大的csv文件,它有一個大整數值的數字列。下面有一個示例。sqldf大整數(INT64)

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的索引。所以我需要確切的價值。我不認爲在這裏會有幫助。我確實需要讀取比R可以處理的值更高的值。我認爲INT64軟件包可能有幫助,但已被存檔。任何關於如何在sqldf中讀取big int的建議?

我使用掃描作爲工作,指定第5列爲字符串。現在我獲得了完整的值,但在連接/合併中使用效率不高。如果以字符串形式讀取是唯一的出路,我可以在sqldf中實現這個嗎? sqldf不支持「what」和「colClasses」。我怎麼能提到第5列應該被視爲字符串?

回答

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