2015-11-24 28 views
0

我有一些數據,看起來像這樣:數據使用sqldf與頁腳

myDat <- data.frame(V1=rnorm(1000), 
        V2=sample(LETTERS, 1000, replace=TRUE), 
        V3=sample(1:1000, 1000)) 
write.table(myDat, file="myData.txt", sep="|", quote=FALSE, col.names=FALSE, row.names=FALSE) 
write("00001000 RECORDS", file="myData.txt", append=TRUE) # This is the annoying footer 

注意底部的頁腳是永遠存在的.. 我想用sqldf讀它。事情是這樣的:

f <- file("myData.txt") 
hkFile <- sqldf("SELECT * FROM f", dbname=tempfile(), 
       file.format=list(header=FALSE, sep="|", eol="\n")) 

我不斷收到,因爲附加在數據頁腳的這個錯誤:

Error in .local(conn, name, value, ...) : 
    RS_sqlite_import: myData.txt line 1001 expected 3 columns of data but found 1 

有一個簡單的方法來繞過頁腳?將數據複製到一個臨時文件是不是一種選擇,因爲我的一些數據集是〜6GB

回答

1

僅僅因爲文件很大並不一定意味着你不能複製它。

這將做到這一點,但它會透明地複製文件。

my <- read.csv.sql("myData.txt", sql = "select * from file", sep = "|", 
    header = FALSE, filter = "head -n -1") 

在Windows上它假定Rtools已安裝並在這種情況下,它通常將能夠找到head,但如果不給的路徑,例如filter = "C:/Rtools/bin/head -n - 1"。如果在Linux上,那麼head應該已經可用。

+0

這工作,謝謝!您能否詳細說明「透明地複製」以及那裏發生了什麼? – panterasBox

+0

它會通過'head -n-1'運行輸入文件,創建一個臨時文件,然後讀取臨時文件以創建副本。嘗試將'verbose = TRUE'添加到'read.csv.sql'參數以查看詳細信息。 –