在 rmarkdown 中创建可编辑表格
Create editable tables in rmarkdown
我正在使用 rmarkdown 和 gtsummary 的组合来创建描述性 tables。 table 编织成 html 时看起来很棒。
看这里:
但是,当编织成 word 时,它们完全失去了格式。
因为我需要根据这些 table 创建图表,所以我有兴趣 将这些 table 编织成单词或 excel.根据我的研究,似乎不可能将这些 table 编织成 excel。
所以我尝试用 Kable 包装打印语句,然后编织成文字。但 kable 似乎只适用于数据框,gtsummary::tbl_cross 创建的对象是它自己的 class.
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
我的问题:
- 有没有办法将 kable 与 gtsummary 一起使用?
- 如果不是,创建 editable tables(tables 可以粘贴到 excel 以制作图表)的最佳方法是什么小白。 请注意,我只需要最后table中包含的百分比,而不是频率,但gtsummary没有只保留百分比的选项。
- 是否有与我所缺少的完全不同的方法?
非常感谢您的建议,请在此处查看我的代码。
我的代码:
---
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 markdown 上的 gtsummary vignette。 http://www.danieldsjoberg.com/gtsummary/articles/rmarkdown.html
在小插图中,您会发现此 table 概述了如何将 gtsummary tables 导出到各种 R markdown 输出类型。
对于您的情况,我建议您使用 as_flex_table()
函数将 gtsummary tables 转换为 flextable。
例如,您可以更新函数以包含此转化。 (小插图中概述了更多 information/options。)
```{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)
}
```
我正在使用 rmarkdown 和 gtsummary 的组合来创建描述性 tables。 table 编织成 html 时看起来很棒。
看这里:
但是,当编织成 word 时,它们完全失去了格式。
因为我需要根据这些 table 创建图表,所以我有兴趣 将这些 table 编织成单词或 excel.根据我的研究,似乎不可能将这些 table 编织成 excel。
所以我尝试用 Kable 包装打印语句,然后编织成文字。但 kable 似乎只适用于数据框,gtsummary::tbl_cross 创建的对象是它自己的 class.
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
我的问题:
- 有没有办法将 kable 与 gtsummary 一起使用?
- 如果不是,创建 editable tables(tables 可以粘贴到 excel 以制作图表)的最佳方法是什么小白。 请注意,我只需要最后table中包含的百分比,而不是频率,但gtsummary没有只保留百分比的选项。
- 是否有与我所缺少的完全不同的方法?
非常感谢您的建议,请在此处查看我的代码。
我的代码:
---
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 markdown 上的 gtsummary vignette。 http://www.danieldsjoberg.com/gtsummary/articles/rmarkdown.html
在小插图中,您会发现此 table 概述了如何将 gtsummary tables 导出到各种 R markdown 输出类型。
对于您的情况,我建议您使用 as_flex_table()
函数将 gtsummary tables 转换为 flextable。
例如,您可以更新函数以包含此转化。 (小插图中概述了更多 information/options。)
```{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)
}
```