Если вы не против использования дополнительных пакетов, вы можете проверить summarytools
(https://github.com/dcomtois/summarytools).
Вот пример (обычно отображается как html , но я сохранил изображение PNG для демонстрационных целей):
suppressPackageStartupMessages(invisible(
lapply(c("summarytools", "dplyr", "kableExtra"),
require, character.only = TRUE)))
dfs <- dfSummary(mtcars[, c("am", "vs", "gear", "carb")],
round.digits = 3,
varnumbers = FALSE,
valid.col = FALSE,
na.col = FALSE,
graph.col = FALSE,
style = "grid",
tmp.img.dir = "/tmp",
method = "grid") %>%
mutate(`Stats / Values` = NULL) #%>% view() to view the html output
print(dfs, method = 'render') %>% as_image(file="out1.png")
Created on 2020-08-04 by the пакет репекс (v0.3.0)
Редактировать
Если вы настаиваете на создании собственных таблиц (и, возможно, их экспорте в Word), есть одна проблема с вашей предложенной таблицей: в R столбцы могут иметь только один класс, поэтому вам придется принудительно принудительно использовать как минимум переменную ' 'столбец к символам. Это также повлияет на выравнивание и не будет выглядеть так красиво.
Также есть одна проблема с rbind
- имена столбцов должны совпадать.
Хотя есть несколько способов, как это сделать Чтобы обойти эти проблемы, может быть проще выбрать другой подход.
Существует несколько пакетов, которые позволяют создавать таблицы html, например flextable
, huxtable
, kableExtra
, но AFAIK, вам нужно будет объединить их впоследствии, например, используя Rmarkdown или скопировав их один за другим и вставив в Word, который сохранит форматирование.
Ниже представлен один из возможных подходов с использованием Rmarkdown. Вам нужно будет сохранить приведенный ниже код как файл Rmd и связать его, что легко сделать в Rstudio (просто откройте файл Rmd и нажмите кнопку knit
). Это сгенерирует файл html в том же каталоге, что и файл Rmd, который содержит ваши таблицы.
---
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
```{r results='asis', echo=FALSE}
suppressPackageStartupMessages(invisible(
lapply(c("dplyr", "knitr", "kableExtra"),
require, character.only = TRUE)))
makeTable <- function(x, df=mtcars){
df %>%
count(!!enquo(x)) %>%
mutate(prop = scales::percent(prop.table(n/n()), accuracy = .01))
}
# generate the individual data.frames
res <- list(makeTable(am),
makeTable(vs),
makeTable(gear),
makeTable(carb))
for (i in res) {
print(kable_styling(
kable(i, format = "html", align = "c", row.names = FALSE),
full_width = FALSE))
}
```