lecture d'un fichier csv avec des noms de lignes répétés en R

j'essaie de lire un fichier csv avec des noms de lignes répétés mais je n'ai pas pu. Le message d'erreur que je reçois est Error in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed.

Le code que j'utilise est:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"))

Un exemple de mes données est donnée ci-dessous:

did <- c("1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657")
aid <- c(101,102,103,104,105,106,107,108,109,110)
temp <- c(36,38,37,39,35,37,36,34,39,38)

data <- cbind(did,aid,temp)

Toute aide sera appréciée.

21
demandé sur Jonathan Leffler 2010-11-01 07:19:12

5 réponses

la fonction voit des noms de ligne dupliqués, donc vous devez gérer cela. La façon la plus facile est probablement avec ligne.names=NULL, qui forcera la numérotation des lignes--en d'autres termes, il traite votre première colonne comme la première dimension et non comme les numéros de ligne, et ajoute donc des numéros de ligne (entiers consécutifs commençant par "1".

read.csv("S1N657.csv", header=T,fill=T, col.names=c("dam","anim","temp"), row.names=NULL)
24
répondu doug 2010-11-02 00:35:16

essaye ceci:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"), 
          row.names = NULL)[,-1]
3
répondu kohske 2010-11-01 04:29:06

un problème que j'avais récemment était que le nombre de colonnes dans la rangée d'en-tête ne correspondait pas au nombre de colonnes que j'avais dans les données elles-mêmes. Par exemple, mes données étaient délimitées par des tabulations et toutes les lignes de données avaient un caractère de tabulation arrière. La ligne d'en-tête (que j'ai ajouté manuellement) n'a pas.

je voulais que les lignes soient auto-numérotées, mais au lieu de cela il regardait ma première ligne comme le nom de la ligne. Extrait du docs (souligné par moi):

ligne.les noms d'un vecteur de les noms de lignes. Cela peut être un vecteur donnant les noms de ligne réels, ou un nombre simple donnant la colonne de la table qui contient les noms de ligne, ou une chaîne de caractères donnant le nom de la colonne de la table contenant les noms de ligne.

S'il y a 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 lignes. Sinon, si ligne.noms est manquant, les lignes sont numérotées.

à l'Aide de rangée.noms = forces nulles numérotation des lignes. Ligne manquante ou nulle.les noms génèrent des noms de lignes qui sont considérés comme "automatiques" (et non conservés par as.matrice.)

en ajoutant un caractère d'onglet supplémentaire à la ligne d'en-tête, la ligne d'en-tête a le même nombre de colonnes que les lignes de données, ce qui résout le problème.

2
répondu imichaeldotorg 2014-11-07 23:03:34

je suppose que votre fichier csv était un converti à partir de xlsx.Ajouter une virgule à la fin de la première ligne ,supprimer la dernière ligne ,fait

1
répondu chen 2014-04-16 13:29:52

bref, vérifiez les noms de vos colonnes. Si votre première ligne est le nom des colonnes, il se peut que vous manquiez un ou plusieurs noms.

Exemple:

"a","b","c"
a,b,c,d
a,b,c,d

l'exemple ci-dessus va causer une rangée.erreur de nom parce que chaque ligne a 4 valeurs, mais seulement 3 colonnes sont nommées.

cela m'est arrivé quand je construisais un csv à partir de ressources en ligne.

0
répondu Travis Heeter 2016-10-05 15:48:11