【问题标题】:Create editable tables in rmarkdown在 rmarkdown 中创建可编辑的表
【发布时间】:2021-11-21 13:55:54
【问题描述】:

我正在使用组合或 rmarkdown 和 gtsummary 来创建描述性表。将表格编成 html 时看起来很棒。

请看这里:

但是,当被编织成单词时,它们完全失去了格式。

由于我需要从这些表格中创建图表,因此我有兴趣将这些表格编入 word 或 excel。根据我的研究,似乎不可能将这些表格编成优秀。

所以我尝试用 Kable 包装打印语句,然后编织成单词。但是 kable 似乎只适用于数据帧,而 gtsummary::tbl_cross 创建的对象是它自己的类。

Error in as.data.frame.default(x) : 
  cannot coerce class 'c("tbl_cross", "tbl_summary", "gtsummary")' to a data.frame
Calls: <Anonymous> ... print -> kable -> as.data.frame -> as.data.frame.default
Execution halted

我的问题:

  1. 有没有办法将 kable 与 gtsummary 一起使用?
  2. 如果没有,为菜鸟创建可编辑表格(可以粘贴到 Excel 中制作图表的表格)的最佳方法是什么? 请注意,我只需要包含在决赛表中的百分比,而不是频率,但 gtsummary 没有仅保留百分比的选项。
  3. 是否有与我所缺少的完全不同的方法?

非常感谢您的建议,请参阅此处获取我的代码。

我的代码:

---
title: "Untitled"
author: "me"
date: "9/29/2021"
output:
  html_document: default
  word_document: default
---


```{r setup, include=FALSE}
# Remove items from memory and environment
rm(list = ls())
# load required libraries
library(magrittr)
library(dplyr)
  library(gtsummary)

# File locations

# read in data 
data_in <- readr::read_table2('Q17_1   Q17_2   Q17_3   Q17_4   survey
No  Yes No  Yes m1
No  Yes No  No  m2
Yes Yes Yes Yes m1
No  No  Yes No  m2
No  No  Yes Yes m1
Yes No  Yes No  m2
No  No  Yes Yes m1
No  No  Yes No  m2
Yes No  Yes Yes m1
')
vct <- data_in %>% select(matches("Q")) %>% names(.)
```



```{r , include=FALSE}
# set up user function create tables
run_xtab <- function(v1) {
  out <- data_in%>%
    tbl_cross(
      row = !!rlang::sym(v1),
      col = survey,
      percent = 'column',
      label = list(survey~v1),
      missing_text = "no"
    ) %>%
    add_p(source_note = TRUE) %>%
    bold_labels()
  
  return(out)
}

```



```{r loop_print, results = 'asis', warning=FALSE, message=FALSE,error=FALSE,echo=FALSE}
 # loop through the questions to create the xtables 
library(knitr)
for (i in vct) {
  tbl <- run_xtab(i)   # build gtsummary table
  # print(kable(tbl))   # Kable does not like gtsummary object
  # stargazer(tbl)      # neither does star gazers
  # tbl <-as.data.frame(tbl) # try converting table to df 
  print(tbl)  # simple print works with html, but knitting to word loses formatting 
}
```

【问题讨论】:

    标签: r r-markdown kable gtsummary


    【解决方案1】:

    我认为你最好的资源将是 R Markdown 上的 gtsummary 插图。 http://www.danieldsjoberg.com/gtsummary/articles/rmarkdown.html 在小插图中,您会发现此表概述了如何将 gtsummary 表导出到各种 R markdown 输出类型。

    在您的情况下,我建议您使用 as_flex_table() 函数将 gtsummary 表转换为弹性表。

    例如,您可以更新函数以包含此转换。 (小插图中概述了更多信息/选项。)

    ```{r , include=FALSE}
    # set up user function create tables
    run_xtab <- function(v1) {
      out <- data_in%>%
        tbl_cross(
          row = !!rlang::sym(v1),
          col = survey,
          percent = 'column',
          label = list(survey~v1),
          missing_text = "no"
        ) %>%
        add_p(source_note = TRUE) %>%
        bold_labels() %>%
        as_flex_table()
      
      return(out)
    }
    ```
    

    【讨论】:

    • 感谢您的建议,我使用了 flex_table 并尝试将其编织成单词(使用 print(kable(tbl)) 一次和 print(tbl) 一次),但数据没有显示为表格。 .
    • 无论出于何种原因,在循环中打印表格通常会导致问题。但它们是可以解决的!将print(tbl) 替换为cat(knit_print(tbl))。这是 flextable 的普遍问题。
    • 非常感谢!!如果您发表评论作为答案,我可以接受!干杯
    • 您是否有机会分享有关使用 kable 和 lapply 的见解?示例: lapply(vec_o​​f_var_names, function_run_tbl_cross, v2='Q2'),我尝试了很多不同的方法,但都没有奏效。 lapply 循环遍历 vec_o​​f_var_names-- Q12_1、Q12_2、Q12_3,并为它们中的每一个创建一个针对 Q2 的 xtab。
    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2011-05-30
    • 2013-07-10
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多