【问题标题】:dec argument in data.table::freaddata.table::fread 中的 dec 参数
【发布时间】:2013-01-04 15:02:59
【问题描述】:

我正在使用来自data.tablefread 来加载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 还没有实现,所以setAs 不能像this post 那样使用

【问题讨论】:

标签: r csv data.table


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 2014-10-28
    • 2022-11-09
    • 1970-01-01
    • 2015-12-30
    • 2013-10-14
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多