是否有fread
由此可變的class
是由在讀取的數據設置爲模仿read.table
行爲的方式。防止柱級推理中的fread()
我有一個數字數據主要數據下面有幾條評論。當我使用fread
來讀取數據時,列被轉換爲字符。但是,通過將nrow
設置爲read.table`,我可以阻止此行爲。這是可能的fread。 (我不希望修改原始數據或修改副本)。由於
一個例子
d <- data.frame(x=c(1:100, NA, NA, "fff"), y=c(1:100, NA,NA,NA))
write.csv(d, "test.csv", row.names=F)
in_d <- read.csv("test.csv", nrow=100, header=T)
in_dt <- data.table::fread("test.csv", nrow=100)
將會產生
> str(in_d)
'data.frame': 100 obs. of 2 variables:
$ x: int 1 2 3 4 5 6 7 8 9 10 ...
$ y: int 1 2 3 4 5 6 7 8 9 10 ...
> str(in_dt)
Classes ‘data.table’ and 'data.frame': 100 obs. of 2 variables:
$ x: chr "1" "2" "3" "4" ...
$ y: int 1 2 3 4 5 6 7 8 9 10 ...
- attr(*, ".internal.selfref")=<externalptr>
作爲一種變通方法,我想我將能夠使用read.table
在一行閱讀,獲取類,並設置colClasses
,但我誤解了。
cl <- read.csv("test.csv", nrow=1, header=T)
cols <- unname(sapply(cl, class))
in_dt <- data.table::fread("test.csv", nrow=100, colClasses=cols)
str(in_dt)
使用Windows8.1 ř版本3.1.2(2014年10月31日) 平臺:x86_64的-W64-的mingw32/64(64位)
聽起來像一個合理的計劃,但後來我實際上閱讀幫助頁面:「如果colClasses請求,fread只會將列升級到更高的類型,它不會將列降級爲更低的類型,因爲會導致NAs。如果您真的需要丟失數據,則必須自己強制這些列。「看來,甚至限制讀取5行失敗。我想我記得colClasses機制是一個相當新的增加,所以也許你應該提交一個功能請求。馬修和阿倫往往非常寬容。 –
當然,必須有一個DT策略來強制所有列爲數字?將'.SDcols'設置爲合適的矢量,如下所示:'DT [,.SD:= lapply(.SDcols,as.numeric),.SDcols = vec]'。我不是一個DT用戶,但我確信有一種最小類型的方法,我懷疑你可以在SO答案中找到它。 –
@BondedDust;我也不是一個DT用戶,它的just read.table與我的數據相比,具有(更嚴重的)問題。我看看SO。謝謝 – user2957945