2015-03-11 4 views
2

Je suis en train de traiter le service météorologique américain Storm Data, qui contient un grand fichier de données CSV pour chaque année à partir de 1950. Le fichier de l'année 1999 contient plusieurs lignes contenant de très grands champs de texte libre qui contiennent des caractères NUL incorporés, dans une base de données ascii autrement vanille. (Le fichier incriminé est au ftp://ftp.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/StormEvents_details-ftp_v1.0_d1999_c20140915.csv.gz). R ne peut pas gérer les données de chaîne corrompues sans erreurs, et cela inclut les fonctions R data.frame, data.table, stringr et stringi (essayé).Existe-t-il un paquet de type sed dans R pour supprimer les NUL intégrés?

Je peux nettoyer les fichiers de NUL avec sed, mais je préférerais ne pas utiliser de programmes externes, comme c'est le cas pour un rapport de type démarquages ​​R avec code incorporé.

Suggestions?

+2

Pouvez-vous donner un exemple d'un emplacement pour un tel caractère nul, ou avoir un code hexadécimal pour ça? –

Répondre

3

Peut-être que cela pourrait être utile:

in.file <- file(description = "StormEvents_details-ftp_v1.0_d1999_c20140915.csv", 
       open = "r") 
writeLines(iconv(readLines(in.file), to = "ASCII"), 
      con = "StormEvents_ascii.csv") 

j'ai pu lire le fichier csv sans erreurs avec cet appel ne read.table:

options(stringAsFactors = FALSE) 
StormEvents <- read.table("StormEvents_ascii.csv", header = TRUE, 
          sep = ",", fill = TRUE, quote = '"') 

Évidemment, vous auriez besoin changer la classe de plusieurs colonnes, puisque tout est considéré comme tel.

+0

Oui, ça marche! Je n'avais pas essayé iconv(), qui peut gérer ces caractères NUL dans les chaînes, il semble. – Bill

+0

Voilà de bonnes nouvelles! Content que ça a marché pour toi. –