我使用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)
Run Code Online (Sandbox Code Playgroud)
你是否看到了一个可以使用的工作(可以设置的R选项)fread
(它快得多,它可以节省我很多时间)?
PS:colClasses
尚未实现,因此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
...
Run Code Online (Sandbox Code Playgroud)
尝试以下显示罪魁祸首:
Sys.localeconv()["decimal_point"]
decimal_point
"."
Run Code Online (Sandbox Code Playgroud)
试图将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
Run Code Online (Sandbox Code Playgroud)
行为很好,并改为:
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
Run Code Online (Sandbox Code Playgroud)
"." 十进制分隔符现在作为字符串加载(应该如此),之前是相反的.
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3029 次 |
最近记录: |