2017-03-20 3 views
2

J'essaie de lire la latitude et la longitude géographiques dans R. Ces données géographiques sont généralement des valeurs numériques avec plus de 6 chiffres. J'essayais de lire le fichier Excel avec read_excel() dans le paquetage "read_excel", et read.csv dans la base R, et read_csv() dans le paquet "readr". Cependant, aucune des fonctions susmentionnées ne peut lire correctement ces données sans perte d'informations. Toutes ces fonctions, sans exception, ne pouvaient lire que les valeurs numériques tronquées à 4 ou 5 chiffres. J'ai également essayé d'utiliser "options (chiffres = 8)" pour spécifier le chiffre par défaut avant de lire les données, mais cela ne fonctionne pas. Ici, j'ai fait un exemple reproductible pour la fonction read_csv() dans le paquet « de readr »:comment spécifier les chiffres des valeurs numériques lors de la lecture des données avec read.csv, read_csv ou read_excel dans R

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

Le système tronque automatiquement les données à 5 chiffres:

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

J'ai vérifié sur stackoverflow, et il semble qu'aucune question similaire n'a été soulevée. Quelqu'un pourrait-il me donner une réponse possible sur la façon de lire cette forme de données avec perte d'information? Merci. :)

+0

Notez que les options de '(chiffres = ...)' comptent également le nombre de chiffres avant la virgule donc avec des chiffres = 7, vous obtenez 112,8397 parce que cela inclut 7 chiffres significatifs –

+0

@docendodiscimus Merci. Je pense que je comprends mal le mot "chiffres". –

Répondre

2

Ce n'est pas un problème avec readr. Les données complètes sont toujours là-R ne montre tout simplement pas tout. La même chose se produit lorsque vous utilisez read.csv() de la base R:

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

Merci. J'ai mal compris le mot "chiffres" comme la longueur des nombres après la décimale. Le problème est assez simple si je comprends bien le mot. :) –