vérifiez cet exemple:
> a = matrix(1:9, nrow = 3, ncol = 3, dimnames = list(LETTERS[1:3], LETTERS[1:3]))
> a
A B C
A 1 4 7
B 2 5 8
C 3 6 9
le tableau s'affiche correctement. Il existe deux manières différentes de l'écrire dans un fichier ...
write.csv(a, 'a.csv')
ce qui donne comme prévu:
"","A","B","C"
"A",1,4,7
"B",2,5,8
"C",3,6,9
et write.table(a, 'a.txt')
qui bousille
"A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
en effet, il manque un onglet vide ... ce qui est pénible pour les choses en aval. Est-ce un bug ou une fonctionnalité? Y at-il un travail autour? (autre que write.table(cbind(rownames(a), a), 'a.txt', row.names=FALSE
)
Salut, yannick
la source
Une légère modification de la réponse très utile @Marek ajoutera un en-tête à la colonne rownames: ajoutez temporairement les rownames comme première colonne dans le data.frame, et écrivez cela, en ignorant les vrais rownames.
et vous obtenez
la source
Pour toute personne travaillant dans le tidyverse (dplyr, etc.), la
rownames_to_column()
fonction du paquet tibble peut être utilisée pour convertir facilement row.names en colonne, par exemple:En combinant cela avec l'
row.names=FALSE
option in, vouswrite.table()
obtenez une sortie avec des noms d'en-tête pour toutes les colonnes.la source
Pour ceux qui rencontrent le même problème lors de l'enregistrement d'une matrice avec
write.table()
et souhaitent conserver la colonne row.names, il existe en fait une solution extrêmement simple:En faisant cela, vous incitez la
write.table
fonction à créer une étiquette d'en-tête pour la colonne row.names. Le fichier .csv résultant ressemblerait à ceci:la source
write.table
attendez un en-tête de longueurncol(matrix)
et vous lui en donnez un de plus. J'ai essayé la solution ci-dessus, cela ne fonctionne pas, le mieux est de déplacer les noms de rangs comme une colonne comme dans d'autres solutionsJ'ai révisé une fonction simple de @mnel, qui ajoute de la flexibilité en utilisant des connexions. Voici la fonction:
Vous pouvez spécifier la fonction comme étant «write.table», «write.csv», «write.delim», etc.
À votre santé!
la source