使用 kable 在 rmarkdown 中生成列联表

Nic*_*ano 5 r contingency knitr r-markdown kableextra

我正在尝试在 rmarkdonw html 文档中生成格式良好的列联表。这是代码:

\n\n
---\ntitle: "Probabilidad"\nauthor: "Nicol\xc3\xa1s Molano Gonzalez"\ndate: "7 de Abril de 2020"\noutput:\n  html_document:\n  fig_caption: true\n---\n\n```{r echo=F, message = FALSE, warning =F}\n\nlibrary(tidyverse)\nlibrary(kableExtra)\nlibrary(knitr)\n\nset.seed(150)\n\n```\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是表的数据:

\n\n
```{r echo=FALSE, results = \'asis\'}\n\nca_ctr_r<-.3\n\nn   <- 250\nnCA <- round(n*ca_ctr_r)\nz0  <- data.frame(status=c(rep("CA",nCA),rep("CTR",n-nCA)))\nz0$exposition <- NA\nexp_CA  <- .45\nexp_CTR <- .19\n\nz0[z0$status %in% "CA","exposition"]  <- ifelse(runif(nCA) < exp_CA,"yes","no")\nz0[z0$status %in% "CTR","exposition"] <- ifelse(runif(n-nCA) < exp_CA,"yes","no")\n\nz0$exposition <- factor(z0$exposition,levels = c("yes","no"))\n\n```\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是打印列联表的代码,应该改进。

\n\n
```{r echo=FALSE, results = \'asis\'}\n\nres  <- kable(t(table(z0)%>%addmargins))\n#res <- kable(t(table(z0)))\nkable_styling(res,"striped", position = "center",full_width = F) %>% add_header_above(c("exposition","status"=2," "))\n\n```\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望代码的输出与基本 R 的输出类似,即:

\n\n
          status\nexposition  CA CTR Sum\n       no   40  96 136\n       yes  35  79 114\n       Sum  75 175 250\n
Run Code Online (Sandbox Code Playgroud)\n\n

add_header_above让我获得列的标题,但我正在努力在正确的位置获得行(说明)的标题。

\n

Ann*_*yan 1

我尝试了一种解决方法,在将其传递给 kable 之前,在表的左侧显式添加一列。

library(tidyverse)
library(kableExtra) 
library(knitr)

cont.table = mtcars %>% select(gear, carb) %>% 
    group_by_all() %>% tally() %>% 
    spread(key = gear, value = n)

cont.table %>% 
    rename("\t" = carb) %>% 
    add_column(" " = c("carb", rep(" ", nrow(.) - 1)), .before = "\t") %>% 
    kable() %>% 
    kable_styling(position = "left", full_width = F, ) %>% 
    add_header_above(c("", "", "gear", rep(" ", ncol(cont.table) - 2))) %>% 
    column_spec(1:2, bold = TRUE) 
Run Code Online (Sandbox Code Playgroud)