我正在使用fread
中的data.table
加载csv文件。但是我的csv文件使用dec=","
作为十进制分隔符(1.23
将是1,23
)。与read.csv
不同,似乎dec
不是允许的参数。
R) args(fread)
function (input = "test.csv", sep = "auto", sep2 = "auto", nrows = -1,
header = "auto", na.strings = "NA", stringsAsFactors = FALSE,
verbose = FALSE, autostart = 30)
您是否看到可以使我使用
fread
的变通方法(可能设置了R选项)(速度快得可以节省很多时间)?PS:
colClasses
尚未实现,因此无法像this post中那样使用setAs
最佳答案
2014年10月更新:现在位于v1.9.5中
fread
现在接受dec=','
(以及其他非'。'十进制分隔符)#917。新段落已添加到?fread
。如果您位于使用dec=','
的国家/地区,那么它应该可以正常工作。如果没有,您将需要阅读该段落以执行额外的步骤。万一它以某种方式破坏了dec='.'
,可以使用options(datatable.fread.dec.experiment=FALSE)
关闭此新功能。
上一个答案...
马特·道尔(Matt Dowle)找到了一个不错的语言环境解决方法。
首先是我的sessionInfo
sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252 LC_MONETARY=French_France.1252 LC_NUMERIC=C
[5] LC_TIME=C
...
尝试执行以下操作将显示出罪魁祸首:
Sys.localeconv()["decimal_point"]
decimal_point
"."
试图设置LC_NUMERIC在Ubuntu(Matthew)和WinXP(me)上运行
Sys.setlocale("LC_NUMERIC", "French_France.1252")
[1] "French_France.1252"
Message d'avis :
In Sys.setlocale("LC_NUMERIC", "French_France.1252") :
changer 'LC_NUMERIC' peut résulter en un fonctionnement étrange de R
行为很好,并且更改为:
DT = fread("A,B\n3,14;123\n4,22;456\n",sep=";")
str(DT)
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
$ V1: num 3.14 4.22
$ V2: int 123 456
“。”小数点分隔符现在作为字符串加载(应该如此),与之前相反。
DT = fread("A,B\n3.14;123\n4.22;456\n",sep=";")
str(DT)
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
$ V1: chr "3.14" "4.22"
$ V2: int 123 456
关于r - data.table::fread中的dec参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14440661/