2017-09-11 2 views
5

J'essaie de lire les informations de la station climatique de ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt. Cependant, depuis la première ligne n'est pas entièrement peuplée (deux cols sont absents) et la 5ème colonne contient des espaces, je ne peux pas terminer la lecture avec:Comment résoudre le problème de fread txt avec EOF?

fread('ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt',sep=) 

Il renvoie un message d'erreur:

Expected sep (' ') but new line, EOF (or other non printing character) ends 
field 5 when detecting types from point 0: AGE00135039 35.7297 0.6500 
50.0 ORAN-HOPITAL MILITAIRE  

Comment appliquer fread correctement à la lecture de ce fichier txt? Je vous remercie! Pourquoi ne pas simplement essayer la fonction read.fwf du paquet utils?

+0

Ok, si je lis ceci correctement, le format de largeur fixe de ce genre est sur la liste de todo: https://github.com/Rdatatable/data.table/issues/1345 – Frank

+1

Vous pouvez essayer de le lire dans une colonne seulement et ensuite la décomposer en toutes les 8 variables, mais ça va être un peu douloureux – ira

+0

Merci @Frank, cela aide et je vais jeter un oeil. – DrX

Répondre

0

Pourquoi ne pas simplement essayer la fonction read.fwf? Les largeurs de colonnes sont données dans le fichier readme.txt (voir section IV).

IV. FORMAT OF "ghcnd-stations.txt" 

------------------------------ 
Variable Columns Type 
------------------------------ 
ID   1-11 Character 
LATITUDE  13-20 Real 
LONGITUDE 22-30 Real 
ELEVATION 32-37 Real 
STATE  39-40 Character 
NAME   42-71 Character 
GSN FLAG  73-75 Character 
HCN/CRN FLAG 77-79 Character 
WMO ID  81-85 Character 
------------------------------ 

Cependant, la tentative suivante renvoie une erreur:

data <- read.fwf("ghcnd-stations.txt", widths = c(11,9,10,7,3,31,4,4,6)) 
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : 
    line 25383 did not have 7 elements 

Inspection de la ligne 25383 révèle la cause de l'erreur.

> x <- readLines("ghcnd-stations.txt", 25383) 
> tail(x, 1) 
[1] "CA002100627 60.8167 -137.7333 846.0 YT HAINES APPS #4        " 

Ainsi, contourner en incluant l'argument comment.char, en changeant la valeur de la valeur par défaut (#) à quelque chose d'autre, probablement la valeur nulle.

data <- read.fwf("ghcnd-stations.txt", widths = c(11,9,10,7,3,31,4,4,6), comment.char="") 

Cela ne prend que 20 secondes environ. Pas vraiment besoin de fread.