2017-03-20 250 views
2

我正在尝试将R的地理纬度和经度读取出来。这些地理数据通常是数字值超过6位的数字。 我试图用“read_excel”包中的read_excel()和基本R中的read.csv以及“readr”包中的read_csv()读取excel文件。然而,上述功能都不能在不丢失信息的情况下正确读取这些数据。所有这些函数无一例外都只能读取以4或5位数字截断的数值。 我也尝试使用“options(digits = 8)”在读取数据之前指定默认数字,但它不起作用。在5位数字如何在读取R中的read.csv,read_csv或read_excel数据时指定数字值的位数

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

系统自动截断数据:: 在这里,我已经为在“readr”包read_csv()函数可再现的示例

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

我已经计算器检查似乎没有提出类似的问题。任何人都可以给我一个关于如何阅读这种信息丢失数据的可行答案吗?谢谢。 :)

+0

注意'选项(位= ...)'也算小数点前的位数所以用数字= 7,你会得到112.8397因为这包括7位有效数字 –

+0

@docendodiscimus谢谢。我想我误解了“数字”这个词。 –

回答

2

这不是读取器的问题。完整的数据仍然存在--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 
+0

谢谢。我误解了“数字”一词作为小数点后的数字长度。如果我正确理解数字,问题就相当简单。 :) –