【问题标题】:how to specify the digits of numeric values when reading data with read.csv, read_csv or read_excel in R在 R 中使用 read.csv、read_csv 或 read_excel 读取数据时如何指定数值的位数
【发布时间】:2017-08-11 19:14:07
【问题描述】:

我正在尝试将地理纬度和经度读入 R。这些地理数据通常是超过 6 位的数值。 我试图用“read_excel”包中的 read_excel() 和 base R 中的 read.csv 和“readr”包中的 read_csv() 来读取 excel 文件。 但是,上述功能都不能正确读取这些数据而不会丢失信息。所有这些函数,无一例外,只能读取截断为 4 位或 5 位的数值。 我还尝试使用“options(digits = 8)”在读取数据之前指定默认数字,但它不起作用。 这里我为“readr”包中的 read_csv() 函数做了一个可重现的例子:

read_csv("112.8397456,35.50496106\n112.583984,37.8519194\n112.5826569,37.8602818", col_names = FALSE)

系统自动将数据截断为5位:

# A tibble: 3 × 2
        X1       X2
     <dbl>    <dbl>
1 112.8397 35.50496
2 112.5840 37.85192
3 112.5827 37.86028

我在stackoverflow上查了一下,似乎没有提出类似的问题。谁能给我一个可行的答案,告诉我如何读取这种信息丢失形式的数据?谢谢。 :)

【问题讨论】:

  • 请注意,options(digits = ...) 还计算小数点前的位数,因此如果位数 = 7,您会得到 112.8397,因为其中包含 7 个有效数字
  • @docendodiscimus 谢谢。我想我误解了“数字”这个词。

标签: r csv data-import readr


【解决方案1】:

这不是 readr 的问题。完整的数据仍在其中——R 只是没有显示全部。当您使用基本 R 的 read.csv() 时,也会发生同样的事情:

library(tidyverse)
df.readr <- read_csv("112.8397456,35.50496106\n112.583984,37.8519194\n112.5826569,37.8602818", col_names = FALSE)

df.base <- read.csv(textConnection("112.8397456,35.50496106\n112.583984,37.8519194\n112.5826569,37.8602818"), header = FALSE)

# By default R shows 7 digits
getOption("digits")
#> [1] 7

# Both CSV files are truncated at 7 digits
df.readr
#> # A tibble: 3 × 2
#>         X1       X2
#>      <dbl>    <dbl>
#> 1 112.8397 35.50496
#> 2 112.5840 37.85192
#> 3 112.5827 37.86028
df.base
#>         V1       V2
#> 1 112.8397 35.50496
#> 2 112.5840 37.85192
#> 3 112.5827 37.86028

# Bumping up the digits shows more
options("digits" = 15)

df.readr
#> # A tibble: 3 × 2
#>            X1          X2
#>         <dbl>       <dbl>
#> 1 112.8397456 35.50496106
#> 2 112.5839840 37.85191940
#> 3 112.5826569 37.86028180
df.base
#>            V1          V2
#> 1 112.8397456 35.50496106
#> 2 112.5839840 37.85191940
#> 3 112.5826569 37.86028180

【讨论】:

  • 谢谢。我将“数字”一词误解为小数点后数字的长度。如果我正确理解了数字这个词,问题就相当简单了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 2019-03-08
相关资源
最近更新 更多