如何将逗号作为小数点使用“ cols()”和“ col_double”

Pel*_*lle 3 csv r readr

我想readr在阅读时将带有包的列解析为正确的类型。

难度:字段之间用分号(;)分隔,而逗号(,)用作小数点。

library(readr)

# Test data:
T <- "Date;Time;Var1;Var2
      01.01.2011;11:11;2,4;5,6
      02.01.2011;12:11;2,5;5,5
      03.01.2011;13:11;2,6;5,4
      04:01.2011;14:11;2,7;5,3"

read_delim(T, ";")
# A tibble: 4 × 4
#              Date     Time  Var1  Var2
#             <chr>   <time> <dbl> <dbl>
# 1       01.01.2011 11:11:00    24    56
# 2       02.01.2011 12:11:00    25    55
# 3       03.01.2011 13:11:00    26    54
# 4       04:01.2011 14:11:00    27    53
Run Code Online (Sandbox Code Playgroud)

因此,我认为解析过程可以这样工作,但是我总是收到错误消息:

read_delim(T, ";", cols(Date = col_date(format = "%d.%m.%Y")))
# Error: expecting a string
Run Code Online (Sandbox Code Playgroud)

同样在这里:

read_delim(T, ";", cols(Var1 = col_double()))
# Error: expecting a string
Run Code Online (Sandbox Code Playgroud)

我认为我所做的事情根本上是错误的。;)

我也很高兴获得一个提示,告诉我如何分辨read_delim逗号作为小数点。read.delim可以很容易地做到这一点,dec = ","但我真的很想从一开始就使用“阅读器”包,而不会费劲。col_euro_double在以前的版本中有一个功能,但已被删除。现在有哪些替代方案?

MrF*_*ick 6

指定locale=使用时read_delim()

read_delim(T, ";", locale=locale(decimal_mark = ","))
#               Date       Time  Var1  Var2
#              <chr>     <time> <dbl> <dbl>
# 1       01.01.2011 40260 secs   2.4   5.6
# 2       02.01.2011 43860 secs   2.5   5.5
# 3       03.01.2011 47460 secs   2.6   5.4
# 4       04:01.2011 51060 secs   2.7   5.3
Run Code Online (Sandbox Code Playgroud)