проверьте этот пример:
> 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
таблица отображается правильно. Есть два разных способа записать его в файл ...
write.csv(a, 'a.csv')
что дает, как и ожидалось:
"","A","B","C"
"A",1,4,7
"B",2,5,8
"C",3,6,9
и write.table(a, 'a.txt')
который лажает
"A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
действительно, пустая вкладка отсутствует .... что является головной болью для последующих вещей. Это ошибка или особенность? Есть ли обходной путь? (кроме write.table(cbind(rownames(a), a), 'a.txt', row.names=FALSE
)
Привет, Янник
r
export-to-csv
write.table
Янник Вурм
источник
источник
Небольшая модификация очень полезного ответа @Marek добавит заголовок в столбец rownames: временно добавьте rownames в качестве первого столбца в data.frame и напишите это, игнорируя настоящие rownames.
> a = matrix(1:9, nrow = 3, ncol = 3, dimnames = list(LETTERS[1:3], LETTERS[1:3])) > write.table(data.frame("H"=rownames(a),a),"a.txt", row.names=FALSE)
и вы получите
"H" "A" "B" "C" "A" 1 4 7 "B" 2 5 8 "C" 3 6 9
источник
Для всех, кто работает в tidyverse (dplyr и т. Д.),
rownames_to_column()
Функцию из пакета tibble можно использовать для простого преобразования имен row.name в столбец, например:library('tibble') a = as.data.frame(matrix(1:9, nrow=3, ncol=3, dimnames=list(LETTERS[1:3], LETTERS[1:3]))) a %>% rownames_to_column('my_id') my_id A B C 1 A 1 4 7 2 B 2 5 8 3 C 3 6 9
Объединение этого с
row.names=FALSE
опцией вwrite.table()
приводит к выводу с именами заголовков для всех столбцов.источник
Для тех, кто сталкивается с той же проблемой при сохранении матрицы
write.table()
и хочет сохранить столбец row.names, на самом деле есть чрезвычайно простое решение:write.table(matrix,file="file.csv",quote=F,sep=";", row.names=T col.names=c("row_name_col;val1_col","val2_col"))
Делая это, вы в основном обманываете
write.table
функцию, создавая метку заголовка для столбца row.names. Полученный файл .csv будет выглядеть так:row_name_col;val1_col;val2_col row1;1;4 row2;2;5 row3;3;6
источник
write.table
ожидайте заголовок длины,ncol(matrix)
и вы даете ему еще один. Я попробовал вышеуказанное решение, оно не работает. Лучше всего переместить названия строк в виде столбца, как в других решенияхЯ переработал простую функцию из @mnel, которая добавляет гибкости за счет использования соединений. Вот функция:
my.write <- function(x, file, header, f = write.csv, ...){ # create and open the file connection datafile <- file(file, open = 'wt') # close on exit on.exit(close(datafile)) # if a header is defined, write it to the file (@CarlWitthoft's suggestion) if(!missing(header)) { writeLines(header,con=datafile, sep='\t') writeLines('', con=datafile, sep='\n') } # write the file using the defined function and required addition arguments f(x, datafile,...) }
Вы можете указать функцию write.table, write.csv, write.delim и т. Д.
Ура!
источник