J'essaye de charger un fichier csv qui a 14 colonnes comme ceci:
StartDate, var1, var2, var3, ..., var14
quand j'émets cette commande:
systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")
Je reçois un message d'erreur.
les noms de lignes en double ne sont pas autorisés
Il me semble que le premier nom de colonne est à l'origine du problème. Lorsque je télécharge manuellement le fichier et supprime le nom StartDate
du fichier, R lit le fichier et remplace le nom de la première colonne par X
. Quelqu'un peut-il me dire ce qui se passe? Le fichier est un fichier csv (séparé par une virgule).
Puis dites à read.table not d'utiliser row.names
:
systems <- read.table("http://getfile.pl?test.csv",
header=TRUE, sep=",", row.names=NULL)
et maintenant vos lignes seront simplement numérotées.
Regardez aussi read.csv
qui est un wrapper pour read.table
qui définit déjà le sep=','
et header=TRUE
arguments pour que votre appel se simplifie
systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL)
Cette question connexe souligne une partie du ?read.table
documentation qui explique votre problème:
S'il existe un en-tête et que la première ligne contient un champ de moins que le nombre de colonnes, la première colonne de l'entrée est utilisée pour les noms de ligne. Sinon, si row.names est manquant, les lignes sont numérotées.
Votre ligne d'en-tête a probablement 1 colonne de moins que le reste du fichier et donc read.table
suppose que la première colonne est row.names (qui doivent tous être uniques), et non une colonne (qui peut contenir des valeurs dupliquées). Vous pouvez résoudre ce problème en utilisant l’une des solutions suivantes:
\t
ou ,
) au début ou à la fin de la ligne d’en-tête du fichier source, ouLe choix dépendra de la structure de vos données.
Exemple:
Ici, la ligne d'en-tête est interprétée comme comportant une colonne de moins que les données, car les délimiteurs ne correspondent pas:
v1,v2,v3 # 3 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
Voici comment cela est interprété par défaut:
v1,v2,v3 # 3 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
Les valeurs de la première colonne (sans en-tête) sont interprétées sous la forme row.names: a1
et b1
. Si cette colonne contient des doublons, ce qui est tout à fait possible, alors vous obtenez le duplicate 'row.names' are not allowed
Erreur.
Si vous définissez row.names = FALSE
, le décalage n'a pas lieu, mais vous avez toujours un nombre incorrect d'éléments dans l'en-tête et dans les données, car les délimiteurs ne correspondent pas.
Solution 1 Ajoutez un délimiteur de fin à l'en-tête:
v1,v2,v3, # 4 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
Solution 2 Supprimez le séparateur final en excès des lignes autres que l'en-tête:
v1,v2,v3 # 3 items
a1,a2,a3 # 3 items!!
b1,b2,b3 # 3 items!!
J'ai eu cette erreur lors de l'ouverture d'un fichier CSV et l'un des champs contenait des virgules. Le champ était entouré de guillemets et j'avais coupé et collé le read.table avec quote = "". Une fois que j'ai pris quote = "", le comportement par défaut de read.table a pris le dessus et a résolu le problème. Alors je suis parti de ça:
systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",", quote="")
pour ça:
systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",")
Une autre raison possible de cette erreur est que vous avez des lignes entières dupliquées. Si tel est le cas, le problème est résolu en supprimant les lignes en double.
Dans mon cas, il y avait une virgule à la fin de chaque ligne. En enlevant cela a fonctionné
Il semble que le problème puisse provenir de plusieurs raisons. Suivre les deux étapes a fonctionné alors que j'avais la même erreur.
La réponse ici ( (https://stackoverflow.com/a/22408965/2236315 ) de @adrianoesch devrait aider (par exemple, résout "Si vous connaissez une solution qui ne nécessite pas la solution de contournement maladroite mentionnée dans votre commentaire (décaler les noms des colonnes, copier les données), ce serait formidable. "et" ... demandant que les données soient copiées "proposé par @Frank).
Notez que si vous ouvrez dans un éditeur de texte, vous devriez voir que le nombre de champs d'en-tête est inférieur au nombre de colonnes sous la ligne d'en-tête. Dans mon cas, l'ensemble de données comportait un "," manquant à la fin du dernier champ d'en-tête.