【问题标题】:Doubles not recognized when reading a file with the read_csv2 function使用 read_csv2 函数读取文件时无法识别双精度
【发布时间】:2016-05-11 20:11:02
【问题描述】:

我使用包阅读器。当我用分号分隔符读取 csv 文件时:

library(readr)
read_csv2("A;B\n1.3;alpha\n2.345;beta", col_types = "dc")

这是我得到的答案:

Warning: 2 parsing failures.
row col               expected actual
  1   A no trailing characters   .3  
  2   A no trailing characters   .345
   A     B
1 NA alpha
2 NA  beta

换言之,无法识别数字 1.3 和 2.345。 用逗号分隔一切都很好:

read_csv("A,B\n1.3,alpha\n2.345,beta", col_types = "dc")
      A     B
1 1.300 alpha
2 2.345  beta

你能重现这个吗?你知道它来自哪里吗? 谢谢你的帮助。

这是我的会话信息:

sessionInfo()
R version 3.2.4 Revised (2016-03-16 r70336)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] readr_0.2.2

loaded via a namespace (and not attached):
[1] Rcpp_0.12.4

【问题讨论】:

  • 来自?read.csv2“使用;作为分隔符,而不是,。这在使用,作为小数点分隔符的欧洲国家很常见。” 可以直接试试read_delim(..., delim = ";")
  • 当小数点为,时,它确实可以很好地识别双精度数
  • @HubertL 是的。但我认为 readr 包中的 read_xxx 函数能够自动检测小数点分隔符,所以我希望 read_csv2("A;B\n1.3;alpha\n2.345;beta", col_types = "dc") 能够正常工作。
  • 它实际上似乎是一个错误,因为它没有考虑语言环境

标签: r readr


【解决方案1】:

实际上,您应该使用read_delim()delim = ";" 选项:

library(readr)
read_delim("A;B\n1.3;alpha\n2.345;beta", col_types = "dc", delim = ";")

【讨论】:

    【解决方案2】:

    tyr 定义分隔符以告诉 R 要查找的内容: 图书馆(读者) read_csv2("A;B\n1.3;alpha\n2.345;beta", col_types = "dc", sep = ";")

    这将告诉它休息; .

    【讨论】:

    • sep 不是read_csv2 的参数(我不是在说read.csv2
    • 完全正确,我的错!我不应该工作这么晚,不戴眼镜看书!我的拼写也很糟糕!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多