Печать трехсторонних таблиц сопряженности в R уценки до DOCX - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь использовать уценку R для создания отчета, который содержит таблицы непредвиденных обстоятельств с 3 путями. Я могу довольно легко создавать таблицы с помощью ftable (), но они плохо отформатированы для печати в уценке.

Вывод должен быть документом DOCX. Поэтому все, что предназначено для форматирования для HTML или LaTeX, мне не пригодится.

Функция kable () в knitr не работает с ftables, а многие другие опции просто распечатывают ее как фрейм данных,При преобразовании ftable в фрейм данных он портит структуру, поэтому они тоже не помогают.

Я создал воспроизводимый пример таблицы с 3 путями, созданной с использованием ftable, которая должна быть примерноразмер таблиц, которые мне нужно вывести:

library(tidyverse)
# this data set is included in dplyr
data("starwars")
data=starwars
#the next couple of lines are just me trimming down the information to be used in the table
data=data %>% filter(species=="Human" | species=="Droid" | species=="Zabrak" | species=="Mirialan" | species=="Wookiee")
tabledata=data[,c(8:10)]
#here's the actual table
table1 = ftable(tabledata,col.vars=c(3,1))
table1

Я надеюсь на довольно простое решение, если это возможно (возможно, пакет, который делает это для меня, или что-то еще). Этот отчет будет содержать много таблиц, и поэтому выполнение слишком сложных задач займет слишком много времени (к тому же я недавно начал использовать R).

Заранее благодарен за любую помощь, которую вы можете оказать!

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вы открыты для немного разных представлений ftable? Например, вот решение с использованием flextable. Это очень хорошо отрисовывается в Word ... В прошлом году я использовал flextable для построения таблиц в 500-страничном документе.

library(flextable)
library(dplyr)
library(magrittr)

table1 = ftable(tabledata,col.vars=c(3,1))

data.frame(table1) %>% spread(species, Freq) %>% 
     regulartable %>% merge_v(j = ~homeworld) %>% autofit()

enter image description here

0 голосов
/ 12 октября 2019

Вы можете делать более красивые вещи с помощью htmlTable (например, в Табличная сгруппированная таблица в R для уценки ), но вот быстрое и грязное решение, которое может быть достаточно в R Markdown, используя format_html из memisc упаковка:

```{r test, echo=FALSE, message=FALSE, warning=FALSE, results='asis'}
library(tidyverse)
library(memisc)
library(knitr)

tabledata <- structure(list(gender = c("male", NA, NA, "male", "female", "male", 
"female", NA, "male", "male", "male", "male", "male", "male", 
"male", "male", "male", "male", "none", "male", "male", "female", 
"male", "male", "male", "female", "male", "male", "male", "male", 
"female", "male", "female", "female", "female", "male", "male", 
"male", "female", "male", "male", "male", "female", "male", "none", 
"female"), homeworld = c("Tatooine", "Tatooine", "Naboo", "Tatooine", 
"Alderaan", "Tatooine", "Tatooine", "Tatooine", "Tatooine", "Stewjon", 
"Tatooine", "Eriadu", "Kashyyyk", "Corellia", "Corellia", "Bestine IV", 
"Naboo", "Kamino", NA, "Socorro", "Bespin", "Chandrila", NA, 
NA, "Coruscant", "Tatooine", "Dathomir", "Haruun Kal", "Iridonia", 
"Naboo", "Naboo", "Tatooine", "Mirial", "Mirial", "Naboo", "Serenno", 
"Alderaan", "Concord Dawn", "Coruscant", "Kashyyyk", "Alderaan", 
NA, NA, NA, NA, "Naboo"), species = c("Human", "Droid", "Droid", 
"Human", "Human", "Human", "Human", "Droid", "Human", "Human", 
"Human", "Human", "Wookiee", "Human", "Human", "Human", "Human", 
"Human", "Droid", "Human", "Human", "Human", "Human", "Human", 
"Human", "Human", "Zabrak", "Human", "Zabrak", "Human", "Human", 
"Human", "Mirialan", "Mirialan", "Human", "Human", "Human", "Human", 
"Human", "Wookiee", "Human", "Human", "Human", "Human", "Droid", 
"Human")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-46L))

table1 = ftable(tabledata,col.vars=c(3,1))

knitr::asis_output(htmltools::htmlPreserve(
   format_html(table1,
               show.titles=TRUE,
               digits=0,
               format="f",
               toprule=2,midrule=1,bottomrule=2,
               split.dec=TRUE,
               style = ftable_format_stdstyle,
               margin="2ex auto", 
               varontop,varinfront)
))
```

Это выглядит так:

enter image description here

...