R中用read.csv、read_csv或read_excel读取数据时如何指定数值的位数
how to specify the digits of numeric values when reading data with read.csv, read_csv or read_excel in R
我正在尝试将地理纬度和经度读入 R。这些地理数据通常是超过 6 位的数值。
我试图在 "read_excel" 包中使用 read_excel() 读取 excel 文件,在基础 R 中使用 read.csv,在 [=22= 中使用 read_csv() ] 包裹。
然而,上述函数中的none个可以正确读取这些数据而不会丢失信息。所有这些函数,无一例外,只能读取截断为 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
我在Whosebug上查了下,好像没有人提过类似的问题。任何人都可以给我一个可行的答案,说明如何在信息丢失的情况下读取这种形式的数据吗?谢谢。 :)
这不是 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
我正在尝试将地理纬度和经度读入 R。这些地理数据通常是超过 6 位的数值。 我试图在 "read_excel" 包中使用 read_excel() 读取 excel 文件,在基础 R 中使用 read.csv,在 [=22= 中使用 read_csv() ] 包裹。 然而,上述函数中的none个可以正确读取这些数据而不会丢失信息。所有这些函数,无一例外,只能读取截断为 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
我在Whosebug上查了下,好像没有人提过类似的问题。任何人都可以给我一个可行的答案,说明如何在信息丢失的情况下读取这种形式的数据吗?谢谢。 :)
这不是 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