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.