J'essaie de charger cet ensemble de données au format laid dans ma session R: http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for
Weekly SST data starts week centered on 3Jan1990
Nino1+2 Nino3 Nino34 Nino4
Week SST SSTA SST SSTA SST SSTA SST SSTA
03JAN1990 23.4-0.4 25.1-0.3 26.6 0.0 28.6 0.3
10JAN1990 23.4-0.8 25.2-0.3 26.6 0.1 28.6 0.3
17JAN1990 24.2-0.3 25.3-0.3 26.5-0.1 28.6 0.3
Jusqu'à présent, je peux lire les lignes avec
x = readLines(path)
Mais le fichier mélange «espace blanc» avec «-» comme séparateurs, et je ne suis pas un expert en regex. J'apprécie toute aide pour transformer cela en une image de données R agréable et propre. Merci!
r
fixed-width
Fernando
la source
la source
read.fwf
pour lire lire les données formatées à largeur fixe.Réponses:
Il s'agit d'un fichier de largeur fixe. Utilisez
read.fwf()
pour le lire:Mettre à jour
Le package
readr
(publié en avril 2015) offre une alternative simple et rapide.Comparaison de vitesse:
readr::read_fwf()
était ~ 2x plus rapide queutils::read.fwf ()
.la source
readr::fwf_empty
, tentera de deviner les largeurs pour vous. Les exemples dereadr::read_fwf
montrent l'utilisation dereadr::fwf_empty
.Une autre façon de déterminer les largeurs ...
Le -1 dans l'argument widths indique qu'il y a une colonne à un caractère qui doit être ignorée, le -5 dans l'argument widths indique qu'il y a une colonne de cinq caractères qui doit être ignorée, de même ...
réf: https://www.inkling.com/read/r-cookbook-paul-teetor-1st/chapter-4/recipe-4-6
la source
Tout d'abord, cette question est directement issue du cours Coursera "Get Data and Clean It" de Leeks. Bien qu'il y ait une autre partie de la question, la partie la plus difficile est la lecture du fichier.
Cela dit, le cours est principalement destiné à l'apprentissage.
Je déteste la procédure de largeur fixe de R. C'est lent et pour un grand nombre de variables, il devient très vite pénible de nier certaines colonnes, etc.
Je pense que c'est plus facile à utiliser
readLines()
, puis à partir de cette utilisationsubstr()
pour créer vos variablesla source
mydata <- data.frame(var4 = substr(x,29,32))
si vous n'aviez besoin que de la quatrième colonne de données. En outre, pour les utilisateurs de Windows, Notepad ++ avec le plugin TextFX vous fournira une règle de caractères comptée claire et simple afin que vous puissiez déterminer ce qu'il faut mettre dans les valeurs de début et d'arrêtsubstr
. Notez cependant que la valeur d'arrêt est un de plus que la position du dernier caractère que vous souhaitez conserver.Vous pouvez maintenant utiliser la
read_fwf()
fonction dans lereadr
package de Hadley Wickham .Une énorme amélioration des performances est à prévoir, par rapport à la base
read.fwf()
.la source
Je documente ici la liste des alternatives pour la lecture de fichiers à largeur fixe dans R, ainsi que quelques points de repère pour lesquels est le plus rapide.
Mon approche préférée est de combiner
fread
avecstringi
; elle est compétitive en tant qu'approche la plus rapide et présente l'avantage supplémentaire (IMO) de stocker vos données en tant quedata.table
:Notez que
fread
supprime automatiquement les espaces de début et de fin - parfois, cela n'est pas souhaitable, auquel cas définistrip.white = FALSE
.Nous aurions également pu commencer avec un vecteur de largeurs de colonnes
ww
en faisant:Et nous aurions pu choisir les colonnes à exclure de manière plus robuste en utilisant des indices négatifs comme:
Remplacez ensuite
col_ends$beg[ii]
parabs(col_ends$beg[ii])
et dans la ligne suivante:Enfin, si vous souhaitez que les noms de colonnes soient également lus par programme, vous pouvez nettoyer avec
readLines
:(notez que combiner cette étape avec
fread
nécessiterait la création d'une copie du tableau afin de supprimer la ligne d'en-tête, et serait donc inefficace pour les grands ensembles de données)la source
Je ne sais rien à propos de R, mais je peux vous fournir un regex qui correspondra à ces lignes:
la source