2016-12-22 1 views
2

Lorsque je lis un fichier CSV contenant un séparateur de fin en utilisant readr::read_csv, j'obtiens un avertissement indiquant qu'un nom de colonne manquant a été renseigné. Voici le contenu d'un court exemple de fichier CSV à reproduire avertissement (stocker l'extrait suivant dans un fichier appelé example.csv):Ignorer les délimiteurs de fin dans readr :: read_csv

A,B,C, 
2,1,1, 
14,22,5, 
9,-4,8, 
17,9,-3, 

Notez la virgule finale à la fin de chaque ligne. Maintenant, si je charge ce fichier avec

read_csv("example.csv") 

Je reçois l'avertissement suivant:

Missing column names filled in: 'X4' 

Même si je veux charger explicitement que les 3 colonnes avec

read_csv("example.csv", col_types=cols_only(A=col_integer(), 
              B=col_integer(), 
              C=col_integer())) 

Je comprends toujours la message d'alerte.

Est-ce le comportement attendu ou existe-t-il un moyen de dire à read_csv qu'il est censé ignorer toutes les colonnes sauf celles que je spécifie? Ou existe-t-il un autre moyen de ranger ce fichier CSV (apparemment mal formé) de sorte que les délimiteurs finaux soient supprimés/ignorés?

+0

Pouvez-vous ajouter un petit exemple qui montre le problème? Est-ce que l'avertissement affecte la sortie d'une manière ou est-ce juste un message? – aosmith

+0

C'est juste un message d'avertissement, mais il semble étrange que même avec 'cols_only' toutes les colonnes semblent être importées. J'ai édité ma question pour inclure un petit exemple de fichier CSV pour montrer le problème. – cbrnr

Répondre

3

Je ne pense pas que vous le pouvez. D'après ce que je peux voir dans la documentation, cols_only() est pour les objets R que vous avez déjà chargés dans

Cependant, la fonction fread() de la bibliothèque data.table vous permet de sélectionner les noms de colonnes spécifiques en tant que fichier est lu.

DT <- fread("filename.csv", select = c("colA","colB"))

2

Voici un autre exemple avec un message d'erreur.

> read_csv("1,2,3\n4,5,6", col_names = c("x", "y")) 
Warning: 2 parsing failures. 
row # A tibble: 2 x 5 col  row col expected actual   file expected <int> <chr>  <chr>  <chr>  <chr> actual 1  1 <NA> 2 columns 3 columns literal data file 2  2 <NA> 2 columns 3 columns literal data 

# A tibble: 2 x 2 
     x  y 
    <int> <int> 
1  1  2 
2  4  5 

Voici le correctif/hack. Voir aussi ce lien SOF. Suppress reader parse problems in r

> suppressWarnings(read_csv("1,2,3\n4,5,6", col_names = c("x", "y"))) 
# A tibble: 2 x 2 
     x  y 
    <int> <int> 
1  1  2 
2  4  5 
+0

Ce [article de blog] (http://romainfrancois.blog.free.fr/index.php?post/2009/05/20/Disable-specific-warnings) décrit comment intercepter uniquement des avertissements spécifiques. Peut être utile pour supprimer uniquement cet avertissement particulier. – nevrome