data.table :: fread中的dec参数

时间:2013-01-21 14:22:45

标签: r csv data.table

我正在使用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)

你是否看到一个解决方案(可以设置一个R选项),这将使我能够使用fread(它快得多,它可以节省我很多时间)?

PS:colClasses尚未实施,因此无法像this post中那样使用setAs

1 个答案:

答案 0 :(得分:8)

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