2013-01-21 47 views
7

我使用的fread来自data.table加载csv文件。但是,我的csv文件使用dec=","作为十进制分隔符(1.23将为1,23)。与read.csv不同,dec似乎不是允许的参数。dec data.table :: fread中的参数

R) args(fread) 
function (input = "test.csv", sep = "auto", sep2 = "auto", nrows = -1, 
    header = "auto", na.strings = "NA", stringsAsFactors = FALSE, 
    verbose = FALSE, autostart = 30) 

你看到周围的工作(A R选项设置而定),这将使我使用fread(它是如此之快,这为我节省了大量的时间)?

PS:colClasses尚未实现这样setAs不能使用像this post

+1

作为解决方法,您可以使用快速文本编辑器来替换。 – Roland

+0

我会说“请问包维护者”,尤其是因为这个函数在开发中:http://stackoverflow.com/questions/14124813/data-table-fread-function –

+0

谢谢罗兰,但我有很多文件加上一些字符串可能会在未来保留'',而且我无论如何也不想改变它们。谢谢,但建议 – statquant

回答

8

更新2014年10月:现在v1.9.5

fread现在接受dec=','(和其他非” 。'十进制分隔符),#917?fread已添加新段落。如果您位于使用dec=','的国家,那么它应该可以正常工作。如果没有,您需要阅读该段落以进行额外的步骤。如果它以某种方式破坏dec='.',则可以使用options(datatable.fread.dec.experiment=FALSE)关闭此新功能。



以前的答案...

马特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(马太福音)和WinXP(我)

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 
相关问题