2013-10-02 6 views
1

Я пытаюсь написать таблицу из R в Excel. Вот некоторые примеры кода:Как написать таблицу из R в Excel

library(XLConnect) 
wb  <- loadWorkbook("C:\\Users\\Bob\\Desktop\\Example.xls", create=TRUE) 
output <- as.table(output) 
createSheet(wb, name="Worksheet 1") 
writeWorksheet(wb, output, sheet="Worksheet 1") 
saveWorkbook(wb) 

Но, кажется, что функция writeWorksheet преобразует таблицу в dataframe. Это заставляет данные выглядеть грязными и неформатированными. Я хочу сохранить структуру таблицы. Как мне изменить приведенный выше код?

+0

Какой класс является исходным объектом 'output'? Вы пытались вставить его прямо в 'writeWorksheet', не переведя его сначала в таблицу? И «напишите таблицу (...) в Excel». Вы имеете в виду, что хотите, чтобы файл имел расширение XLS или сделал что-то более универсальное, например CSV? –

+0

Это задано через несколько минут (например, [Как сохранить фрейм данных в файле txt или excel, разделенном столбцами] (http://stackoverflow.com/questions/18514694/how-to-save-a-data-frame -in-a-txt-or-excel-file-separate-by-columns)) – John

+0

@John Я не согласен. Проблема здесь в том, что 'writeWorksheet' преобразует таблицу в фрейм данных, что существенно перетаскивает таблицу из широкого формата в длинный. – joran

ответ

0

Проблема заключается в том, что writeWorksheet преобразует объект таблицы в фрейм данных. То, как это происходит, состоит в том, что R в основном «расплавит» его в длинном формате, тогда как объект таблицы обычно печатается на консоль в «широком» формате.

Это немного неприятно, но вам, как правило, приходится вручную преобразовывать таблицу в кадр данных, соответствующий формату, который вам нужен. Пример:

library(reshape2) 
tbl <- with(mtcars,table(cyl,gear)) 
> tbl 
    gear 
cyl 3 4 5 
    4 1 8 2 
    6 2 4 1 
    8 12 0 2 
> as.data.frame(tbl) 
    cyl gear Freq 
1 4 3 1 
2 6 3 2 
3 8 3 12 
4 4 4 8 
5 6 4 4 
6 8 4 0 
7 4 5 2 
8 6 5 1 
9 8 5 2 
> tbl_df <- as.data.frame(tbl) 
> final <- dcast(tbl_df,cyl~gear,value.var = "Freq") 
> final 
    cyl 3 4 5 
1 4 1 8 2 
2 6 2 4 1 
3 8 12 0 2 
> class(final) 
[1] "data.frame" 

Тогда вы должны быть в состоянии написать что фрейм данных на лист Excel без проблем.

Смежные вопросы