2015-09-23 21 views
2

我通過使用Lending Club的歷史貸款數據集來學習R。數據的代表性子集在這裏:https://gist.github.com/adetch/11b1c2b6eac0b6add23f將某些colClasses設置爲整數時,read.table在發現引用字段值時發生抱怨

的命令問題:

problem <- read.csv("test.csv",na.strings=c("","<NA>"),colClasses=c("mths_since_last_major_derog"="integer")) 

我打的錯誤:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 
scan() expected 'an integer', got '""' 

我打了一個類似的問題,用下面的命令:

problem <- read.csv("test.csv",na.strings=c("","<NA>"),colClasses=c("id"="integer")) 

這種情況下的錯誤:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 
scan() expected 'an integer', got '"1077501"' 

所以它似乎/在我看來,

  • Rinteger類是用引號
  • 和不兼容的可能,該na.strings轉換類的掃描和integer後運行檢查空字符串失敗。

然而,其他列包裹在""member_idloan_amnt得到鑄成integer無投訴(同時也沒有使用任何colClasses特殊干預!)。

貼近的問題:

  • 我怎麼投這些領域(idmths_since_last_major_derog)爲整數,而不是因子(注意有一些應該澆鑄成的因素衆多領域)

更重要的是:

  • 哪裏是我的心智模式類,類的強制,read.table/read.csv等分解?
+0

我從來沒有使用名爲向量colClasses前,但我確實看到可能非常有用。對'scan'進行了一些更改以適應R 3.0中的長整數/數字處理更改。也許這是一個副作用? –

回答

0

請勿使用colClasses。如果你真的需要強制,然後讀取它,然後use$id <- as.integer(problem$id)

但在這種情況下(您的test.csv)我認爲R是相當不錯的加載數據。

編輯

只是再次重申。想象一下,有3列一個簡單的數據表:

id,member_id,term 
1077501,1296599,36 months 
1077430,1314167,60 months 
1077175,1313524,36 months 
1076863,1277178,36 months 

如果通過

d <- read.csv("c:/temp/R/data.csv") 

加載數據,則R將盡最大努力來滿足數據類型。 如果你真的想先告訴它,使用colClasses;如果你這樣說

d <- read.csv("c:/temp/R/data.csv", colClasses = c("integer")) 

那麼它會嘗試使用類integer,每列,因爲它是重複colClasses載體。

同樣的問題與

d <- read.csv("c:/temp/R/data.csv", colClasses = c("integer","character")) 

試圖加載第一列作爲colClasses[1],即整數 - 確定。

試圖加載第二列爲colClasses[2],即字符 - 確定。

嘗試加載第3列 - 因爲沒有colClasses[3]那麼回收colClasses並回到colClasses[1] - 這是行不通的(R犯規知道如何迫使'36個月的整數值)

EDIT2

後實際看數據集,問題是你的列不具有任何價值,並且只存儲""。 所以你需要添加""na.string並且將這樣的伎倆: (即你需要躲避",您的實際字符串將是"\"\""

problem <- read.csv("c:/temp/R/test.csv",na.strings=c("\"\"","","<NA>"),colClasses=c("mths_since_last_major_derog"="integer")) 
+0

@BondedDust對該問題發表了評論,但將其刪除;所以只需重新迭代:'colClasses'即可使用,但如果矢量不夠長,它將被回收。 – rbm

+1

迴避'colClasses'的原因是什麼?我的理解是,提前向類提供R可顯着提高'read.table/read.csv'的速度。 – kayaker243

+0

你是什麼意思「如果矢量不夠長,它會被回收」? – kayaker243

相關問題