2016-04-29 67 views
-2

fread("Dummy data.CSV", sep = "~")數據被適當地使用data.table不讀::的fread

撞到塔22的鍵入數據行19257字符,字段包含 「不適用」。強制先前讀取 邏輯,整數或數字這一列中的值返回到可能不是 無損的字符;例如,如果'00'和'000'現在在 之前發生,只是'0',並且可能與',,'和 ',NA'的處理不一致(如果它們出現在此列之前凹凸)。如果此 事宜請重新運行並將此colcolles設置爲此字符的「字符」。請注意,列類型檢測使用前5行, 中間5行和最後5行,所以希望此消息 應該非常少見。如果要報告給datatable-help,請重新運行,並且包含來自verbose = TRUE的輸出。

我該如何解決這個問題?

+4

你看過警告了嗎?這很清楚。 – Arun

回答

2

這不是一個錯誤,而是一個警告。 fread查看文件的開始,中間和結尾以猜測列的數據類型。然後,當讀取整個文件時,它可能碰到不符合先前確定的數據類型的值。在你的案例中,第22列已被猜測爲邏輯,整數或數字,但它包含字符串「NOT APPLICABLE」。因此整列變成了字符類型。 fread提醒您數據類型可能不是您通常期望的數據類型。

1

其實這也可能是一個答案。

@ paljenczy的回答完美地解釋了爲什麼你得到了警告,那麼你可以使用na.strings = c("NA", "NOT APPLICABLE")來把這個字段變成NA,如果這是可以接受的。如果不是,請添加colClasses = list(character = 22)以將整列讀取爲字符,然後處理它所需的信息。

編輯:關於將此「不適用」值設置爲NA的一條評論。這可能不是一個好主意,因爲不適用的是一條信息,您將使用NA或將整列轉換爲logicalintegernumeric。我的方法是創建一個新的二進制列,它將指出列22中的相應值是以數字還是「不適用」的形式給出,然後將整列22轉換爲您想要的任何格式。

+0

Colclasses工作。使用Fread讀取數據時的更多信息可以將數字變量轉換爲整數。例如: - 在數據中,我有4個變量,其中一個是數字,所以使用fread(會自動檢測變量的類型)將數值變量作爲整數變量導入。 –

+0

在'integer = colNum'中使用'colClasses()',你將會失去一些準確性(參見http://stackoverflow.com/questions/11638303/how-to-convert-num-to-int-in-r )。如果這能奏效,你可以接受答案來標記你不需要新的。 –

相關問題