probleme de décalage de colonne

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

yan BAUMANN
Messages : 6
Enregistré le : 02 Fév 2017, 10:41

probleme de décalage de colonne

Messagepar yan BAUMANN » 08 Fév 2017, 08:12

bonjour

j'ai un décalage de colonne vers la droite apres avoir fait la commande write.

voici la commande

ND_brutEXPL <- read.table("NDbis.txt", sep=" ")
nrow(ND_brutEXPL)
attach(ND_brutEXPL)

write.table(ND_brutEXPL,file="ND_brutEXPL1.txt",quote=FALSE,row.names=T,col.names=T)

merci de votre aide

yan

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: probleme de décalage de colonne

Messagepar Pierre-Yves Berrard » 08 Fév 2017, 08:33

Bonjour,

Par défaut, le séparateur de write table est l'espace. Ça correspond à vos données ?
Donnez si possible les premières lignes de la table (résultat de dput(ND_brutEXPL[1:3,]).

Autre idée : essayez avec

Code : Tout sélectionner

row.names = FALSE
PY

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Re: probleme de décalage de colonne

Messagepar Florent Aubry » 08 Fév 2017, 10:25

En effet, write.table a un comportement surprenant par défaut quand on relit le tableau par un tableur : la première colonne contient les noms des lignes mais la première ligne contient les noms des colonnes en commençant par la première colonne. Il y a donc un décalage comme constaté par Yan. Cependant le read.table gère le problème. Quand header=TRUE est déclaré et qu'il manque une valeur sur la première ligne, read.table considère que la première colonne contient les noms des lignes. La lecture par R est donc correcte dans ce cas. Pour éviter ce problème si le tableau doit être relu par un autre logiciel, il faut donc déclarer dans write.table, row.names=FALSE. Éventuellement, si les noms des lignes sont importants par la suite, ajouter dans l'écriture une colonne des noms par exemple par le code suivant :

Code : Tout sélectionner

write.table( cbind( donnees, NOMS=row.names( donnees)), file="mon_fichier.txt", row.names=FALSE....


En réalité le problème ne vient pas du write.table mais du read.table dont le comportement par défaut est header=FALSE. Donc dans ce cas, la première ligne est considéré contenir des données et il y a bien 1 colonne de plus que dans les données initiales. La dernière colonne de la première ligne devrait être vide. Il faut impérativement écrire :

Code : Tout sélectionner

ND_brutEXPL <- read.table("NDbis.txt", sep=" ", [b]header=TRUE[/b])


Remarque, il est préférable d'utiliser un séparateur autre que " " (celui par défaut du write.table), c'est plus pratique pour relire le tableau en dehors de R et cela évite certains problèmes s'il y a des chaînes contenant un blanc. Utiliser soit "," (la virgule) [cf. format csv], soit la tabulation "\t" est à mon avis un meilleur choix.

yan BAUMANN
Messages : 6
Enregistré le : 02 Fév 2017, 10:41

Re: probleme de décalage de colonne

Messagepar yan BAUMANN » 09 Fév 2017, 07:35

bonjour,

merci pour votre aide.
j'ai donc fait la commande
pour éviter une ligne supplémentaire aprés la lecture par R

ND_brutEXPL <- read.table("NDbis.txt", sep="\t",header = TRUE)
write.table(ND_brutEXPL,file="ND_brutEXPL1.txt",quote=FALSE,row.names=False,col.names=T)

mais comment fait pour éviter la colonne en plus, je n'ai pas bien comrpris

merci

yan

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Re: probleme de décalage de colonne

Messagepar Florent Aubry » 09 Fév 2017, 08:16

Dans le write.table, row.names=FALSE avec FALSE en majuscule, ce qui signifie 'pas de colonne pour les noms de ligne'. Bien entendu, il faut aussi spécifier le séparateur de colonnes utilisée dans write.table par sep=séparateur (par exemple, sep="\t") si on n'utilise pas le séparateur par défaut qui est le blanc. De plus, si les chiffres sont en format français (virgule pour les décimales), on peut le spécifier par l'argument dec.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité