read_csv2()并使用locale()参数将点小数作为数字导入

时间:2017-07-05 12:47:46

标签: r

使用read_csv2()我尝试导入数据(csv格式和;分隔)并自动检测.十进制数。

到目前为止我没有成功,并继续获得以下输出(可以看到最后一列是<chr>而不是<num>):

# A tibble: 46 x 4
             id     segment_id             value_type             value
          <int>          <int>                  <chr>             <chr>
1             1              1                    min                 0
2             1              1                    max               0.2
3             1              2                    min                 0
4             1              2                    max               0.2
...

我尝试过:

1

read_csv2("table.csv", col_types = cols())

2。我读了readr并了解了locale()关于以下内容的信息

区域设置控制默认值因地而异。默认语言环境是以美国为中心的(如R),但您可以使用locale()创建自己的语言环境,以控制默认时区,编码,小数点,大标记和日/月名称等内容。 / em>的

但是,使用下面的代码,我没有解决我的问题:

read_csv2("table.csv", col_types = cols(), col_names = TRUE, locale(decimal_mark = "."))

3。阅读How to make R's read_csv2() recognise the text characters properly后,我尝试了所有在 File \ Save with Encoding ... 中列出的所有encondings无法使用:

read_csv2("table.csv", col_types = cols(), col_names = TRUE, locale(encoding = "ISO-8859-1"))

列出的编码为:ISO-8859-1,ASCII,BIG5,GB18030,GB2312,ISO-2022-JP,ISO-2022-KR,ISO-8859-2,ISO-8859-7,SHIFT-JIS, UTF-8,WINDOWS-1252

1 个答案:

答案 0 :(得分:0)

当我以您的4行作为csv运行read_csv2并运行以下行时:

prueba <- read_csv2(file = input_prueba, col_types = cols(), col_names = TRUE, locale(encoding = "ISO-8859-1"))

我得到相同的输出,最后一列作为字符列导入,但有一条消息建议使用read_delim():

Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control

如果您仍然想使用read_csv2,这是我的方法:

#For a quicker management of tables use data.table
install.packages("data.table")
library("data.table")

prueba <- as.data.table(prueba)

#Change column to number
prueba[,value:=as.double(value)]
str(prueba)
Classes ‘data.table’ and 'data.frame':  4 obs. of  4 variables:
 $ id        : int  1 1 1 1
 $ segment_id: int  1 1 2 2
 $ value_type: chr  "min" "max" "min" "max"
 $ value     : num  0 0.2 0 0.2