当前位置: 首页 > 知识库问答 >
问题:

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

松新
2023-03-14

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

到目前为止,我一直没有成功,并不断得到以下输出(可以看到最后一列是

# 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()创建自己的语言环境,控制默认时区、编码、小数标记、大标记和日/月名称等内容。

然而,使用下面的代码,我并没有解决我的问题:

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

3.在阅读了如何使R的read\u csv2()正确识别文本字符后,我尝试了File\Save with Encoding中列出的所有编码。。。RStudio的无效:

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个答案

欧阳山
2023-03-14

当我用你的4行作为csv运行read_csv2并运行这些行时:

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

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

使用','作为十进制,'.'作为分组标记。使用read_delim()进行更多控制

如果您仍然想使用read\u 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
 类似资料:
  • 我试图导入一个程序,并在其中使用几个函数,但我遇到了一个问题,与argparse有关。 在我想使用的函数中,创建者将其解析器参数传递给函数,如下所示。 我想知道如何在我正在编写的另一个程序中使用这个函数。我是否以某种方式创建了一个parser.parse_args()对象,其参数与他相同?我想到的一件事是使用subprocess.popen这样运行它: 但这似乎不太理想。我真的对如何处理argpa

  • 问题内容: 有没有办法将python浮点数舍入为x小数?例如: 我已经找到了修剪/截断它们的方法(66.666666666-> 66.6666),但是不是圆形的(66.666666666-> 66.6667)。 问题答案: 使用内置功能: 帮助: round(number [,ndigits])->浮点数 将数字四舍五入到给定的精度(以十进制数字表示)(默认为0位数)。这总是返回一个浮点数。精度可

  • 如标题所示,我希望将逗号小数(法属加拿大系统)转换为VBA的周期小数。 除此之外, 它必须转换第3和第4列 这些列中的一些单元格是空的(我不是说所有小数以下的空单元格,而是介于两者之间的单元格) 小数是字符串 下图中的行数仅供示例之用。它们可能要多得多。 小数也因表而异(银行对账单对银行对账单),所以我不想要只适用于这些数字的代码。 小数分隔符是"," 组分隔符为" 最后,一些我并不想要的图片(请

  • 我想把54.5345四舍五入到54.54,也就是说,如果我有第三个小数位,那么我想在第二个小数位上加1。 我试过用math.round但如果第三小数小于5,它总是四舍五入

  • 问题内容: 我有一个价格列表,逗号带有小数点,点是千位分隔符。 一些例子: 12,30 116,10 1.563,14 这些来自第三方。我想将它们转换为浮点数并将它们添加在一起。 做这个的最好方式是什么? number_format 似乎不适用于此格式, str_replace 似乎有点过头了,因为我必须对每个数字进行多次操作。 有更好的办法吗?谢谢。 问题答案: 使用去除点并不过分。 几乎可以肯

  • 问题内容: 是否存在将数字分割成两个部分(即整数部分和小数部分)的有效方法? 问题答案: 用途: