2014-03-12 92 views
12

說我有第一個test.csv看起來像這樣FREAD無法讀取的.csv與第一列文件空

,a,b,c,d,e 

如果我嘗試使用read.csv讀它,它工作正常。

read.csv("test.csv",header=FALSE) 
# V1 V2 V3 V4 V5 V6 
#1 NA a b c d e 
#Warning message: 
#In read.table(file = file, header = header, sep = sep, quote = quote, : 
# incomplete final line found by readTableHeader on 'test.csv' 

但是,如果我試圖讀取使用fread這個文件,我得到一個錯誤信息。

require(data.table) 
fread("test.csv",header=FALSE) 
#Error in fread("test.csv", header = FALSE) : 
# Not positioned correctly after testing format of header row. ch=',' 

爲什麼會發生這種情況,我該如何解決這個問題?

+4

我認爲這是一個錯誤 - 這是由@gsee在這裏報告:https://r-forge.r-project.org/tracker/index.php?func=detail&aid=5413&group_id=240&atid=975 –

+0

謝謝,我想現在回到1.8將解決現在的問題。 –

+0

@KevinUshey似乎我無法在R v3.03上安裝v1.8.10。你有什麼其他的建議? –

回答

1

至於我,我的問題只是第一個?我的文件的行缺少ID值。

所以我能夠通過指定autostart足夠遠是成一個非缺失值彈出的文件來解決問題:

fread("test.csv", autostart = 100L, skip = "A") 

這保證了當FREAD嘗試自動識別sepsep2,它在文件格式良好的地方這樣做。

指定skip還可以確保fread找到正確的行,在該行中將列的名稱作爲基礎。

如果第一個字段確實沒有非缺失值,那麼最好使用Richard Scriven的方法從.csv中刪除該字段,或者在您最喜歡的文本編輯器中找到並替換。

0

我想你可以使用fread函數的skip/select/drop屬性來達到這個目的。

fread("myfile.csv",sep=",",header=FALSE,skip="A")#to just skip the 1st column 
fread("myfile.csv",sep=",",header=FALSE,select=c(2,3,4,5)) # to read other columns except 1 
fread("myfile.csv",sep=",",header=FALSE,drop="A") #to drop first column 
0

我試過製作該csv文件並運行代碼。它現在似乎工作 - 對其他人也一樣?我認爲這可能是一個問題,因爲最後沒有換行(因此read.csv的警告),但是fread可以處理最後是否有新行。