2013-03-16 67 views
9

我碰到一個問題fread()函數data.table包。我知道它仍然是試驗性的,但也許我在某處犯了一些錯誤。通過fread()讀取CSV與row.names

這裏是重複的例子:

library(data.table) 
test <- data.frame(a=rnorm(300), b=rnorm(300)) 
write.csv(test,"a.csv") 
fread("a.csv") 

給出了一個錯誤:

Error in rbindlist(allargs) : 
    Item 2 has 2 columns, inconsistent with item 1 which has 3 columns 

和側面的問題:我爲什麼要永遠離開row.names=TRUEwrite.csv問題?到目前爲止,我只遇到了問題,因爲它向數據添加了一個未命名的列。

Thx。

回答

7

作爲一種變通方法,您可以閱讀rownames作爲新列,通過設置header=FALSE

fread("a.csv",header=FALSE) 
header' changed by user from 'auto' to FALSE 
     V1     V2     V3 
    1:      a     b 
    2: 1 -1.55640470495795 -1.344760319214 
    3: 2 2.89752713867643 2.48413035874463 
    4: 3 -0.493990961968582 0.119727513514055 
    5: 4 0.559770137546773 1.07420769675405 
---           
297: 296 0.585750601363698 -1.59845801200953 
298: 297 -0.867339301988422 0.776738489388772 
299: 298 0.0942821874550108 -0.649440075398178 
300: 299 -0.308039637386426 -0.840171787291445 
301: 300 0.358526722813896 -1.362322309472 

fread的幫助下,它看起來所有的例子都是用row.names=FALSE,所以你剛纔提到這個作品罰款:

write.csv(test,"b.csv",row.names=FALSE) 
fread("b.csv") 
+2

那麼'row.names = TRUE'的用處呢? :) – krhlk 2013-03-16 12:41:38

+1

@tomaskrehlik很好的問題:)個人我不使用它...也許爲文件的人類可讀性。 – agstudy 2013-03-16 12:44:55

+2

@tomaskrehlik像agstudy我真的不使用rownames。爲了完整性,我添加了一個todo項目來處理它們和一個鏈接回到這個問題。感謝您的突出。 – 2013-03-17 21:54:54