verifique este exemplo:
> 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
a tabela é exibida corretamente. Existem duas maneiras diferentes de gravá-lo em um arquivo ...
write.csv(a, 'a.csv')
que dá como esperado:
"","A","B","C"
"A",1,4,7
"B",2,5,8
"C",3,6,9
e write.table(a, 'a.txt')
que bagunça
"A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
na verdade, uma guia vazia está faltando ... o que é uma dor de cabeça para as coisas posteriores. isso é um erro ou uma característica? Existe uma solução alternativa? (diferente de write.table(cbind(rownames(a), a), 'a.txt', row.names=FALSE
)
Saúde, yannick
fonte
Uma pequena modificação na resposta do @Marek muito útil VAI adicionar um cabeçalho à coluna rownames: adicione temporariamente os rownames como a primeira coluna no data.frame e escreva isso, ignorando os nomes reais.
e você consegue
fonte
Para quem trabalha no tidyverse (dplyr, etc.), a
rownames_to_column()
função do tibble pacote pode ser usada para converter facilmente row.names em uma coluna, por exemplo:Combinar isso com a
row.names=FALSE
opção emwrite.table()
resulta na saída com nomes de cabeçalho para todas as colunas.fonte
Para aqueles que enfrentam o mesmo problema ao salvar uma matriz
write.table()
e desejam manter a coluna row.names, há uma solução extremamente simples:Ao fazer isso, você está basicamente enganando a
write.table
função para criar um rótulo de cabeçalho para a coluna row.names. O arquivo .csv resultante ficaria assim:fonte
write.table
espere um cabeçalho de comprimentoncol(matrix)
e você está dando mais um. Eu tentei a solução acima, ela não funciona, o melhor é mover os rownames como uma coluna como em outras soluçõesEu revisei uma função simples de @mnel, que adiciona flexibilidade usando conexões. Aqui está a função:
Você pode especificar a função como 'write.table', 'write.csv', 'write.delim' etc.
Felicidades!
fonte