有什么方法可以使用 R 导出学术文章中的表格吗?
Is there any way to export tables in a academic article using R?
我有一个观察的数据框,我想把这个数据框导出到docx
文件中,格式如图。我可以做到这一点,但很难。有没有更方便的方法?以下是我知道可能有帮助的软件包:knitr
printr
bookdown
。
假设我有一个这样的数据框 mydata
:
Group CRP PCT
pos 1 7
pos 2 8
pos 3 9
neg 4 10
neg 5 11
neg 6 12
我想要这样的output
:
Group CRP PCT
pos 2(1~3) 8(7~9)
neg 5(4~6) 11(10~12)
p-value 0.00 0.00
我觉得问题是:
- 鉴于上面的
mydata
,我怎样才能轻松地将它转换为 output
?
- 得到
output
后,如何导出成与图片格式相同的docx
?
我不确定你所说的 "the hard way" 是什么意思,但你上面生成的代码看起来像是用 LaTEX/sweave 创建的,或者是用 Rmarkdown 创建的 pdf。 Rmarkdown 有一个 "Knit as" 选项。将此从 pdf 更改为 word,它将在 word 文档中输出您的 table。同样,它看起来不太像,因为它是用 LaTEX 创建的(直接创建或在程序后台创建)。我建议查看 LaTEX 以更好地了解如何使用该软件编辑文档。
您可以使用 dplyr
转换您的数据,并使用 tableHTML
创建一个 table 就像您问题中的那个。
library(dplyr)
这个函数是用来总结CRP
和PCT
的GROUP
。
fun <- function(x) {
paste0(x[! x %in% c(min(x), max(x)) ],
"(",
min(x),
"~",
max(x),
")")
}
在 mydata
上使用 summarise_all()
中的函数,按 Group
分组,并按 Group
:
对数据进行排序
output <- mydata %>%
group_by(Group) %>%
summarise_all(.funs = fun) %>%
arrange(desc(Group))
然后在output
上使用tableHTML
创建一个科学的table:
library(tableHTML)
output %>%
tableHTML(rownames = FALSE,
widths = rep(100, 3),
theme = 'scientific')
结果如下所示:
我一直在使用 flextable
将漂亮的 table 导出到 Word,经过几个小时的痛苦和痛苦,我现在真的很满意。这是我的 R Markdown 代码块和它从中提取数据的 CSV 文件。您可以从 https://drive.google.com/open?id=1V1yMrz9cWX0YJwoUEJG8Nk01JPcLG-ZW
下载我在此示例中使用的 CSV
```{r echo=FALSE, message=FALSE, warning=FALSE}
library(magrittr)
library(dplyr)
library(flextable)
peoso <- read.csv("PEO-SO.csv",header=TRUE)
peoso %>% select(-grpindex) %>%
regulartable(col_keys=c("Type","col1","Number","col2", "Description")) %>%
merge_v(~Type) %>% autofit() %>% width(j=~Description, width=5) %>% empty_blanks()
```
width=
部分可让您控制列的宽度,这样您就可以避免 table 在 Word 中呈现在页面之外。 col1
和 col2
值作为 "dummy" 列存在,以在 table 的列之间创建 space。这是最终 table 的一部分在 WORD 中的样子,因此您可以看到它呈现的效果如何:
我有一个观察的数据框,我想把这个数据框导出到docx
文件中,格式如图。我可以做到这一点,但很难。有没有更方便的方法?以下是我知道可能有帮助的软件包:knitr
printr
bookdown
。
假设我有一个这样的数据框 mydata
:
Group CRP PCT
pos 1 7
pos 2 8
pos 3 9
neg 4 10
neg 5 11
neg 6 12
我想要这样的output
:
Group CRP PCT
pos 2(1~3) 8(7~9)
neg 5(4~6) 11(10~12)
p-value 0.00 0.00
我觉得问题是:
- 鉴于上面的
mydata
,我怎样才能轻松地将它转换为output
? - 得到
output
后,如何导出成与图片格式相同的docx
?
我不确定你所说的 "the hard way" 是什么意思,但你上面生成的代码看起来像是用 LaTEX/sweave 创建的,或者是用 Rmarkdown 创建的 pdf。 Rmarkdown 有一个 "Knit as" 选项。将此从 pdf 更改为 word,它将在 word 文档中输出您的 table。同样,它看起来不太像,因为它是用 LaTEX 创建的(直接创建或在程序后台创建)。我建议查看 LaTEX 以更好地了解如何使用该软件编辑文档。
您可以使用 dplyr
转换您的数据,并使用 tableHTML
创建一个 table 就像您问题中的那个。
library(dplyr)
这个函数是用来总结CRP
和PCT
的GROUP
。
fun <- function(x) {
paste0(x[! x %in% c(min(x), max(x)) ],
"(",
min(x),
"~",
max(x),
")")
}
在 mydata
上使用 summarise_all()
中的函数,按 Group
分组,并按 Group
:
output <- mydata %>%
group_by(Group) %>%
summarise_all(.funs = fun) %>%
arrange(desc(Group))
然后在output
上使用tableHTML
创建一个科学的table:
library(tableHTML)
output %>%
tableHTML(rownames = FALSE,
widths = rep(100, 3),
theme = 'scientific')
结果如下所示:
我一直在使用 flextable
将漂亮的 table 导出到 Word,经过几个小时的痛苦和痛苦,我现在真的很满意。这是我的 R Markdown 代码块和它从中提取数据的 CSV 文件。您可以从 https://drive.google.com/open?id=1V1yMrz9cWX0YJwoUEJG8Nk01JPcLG-ZW
```{r echo=FALSE, message=FALSE, warning=FALSE}
library(magrittr)
library(dplyr)
library(flextable)
peoso <- read.csv("PEO-SO.csv",header=TRUE)
peoso %>% select(-grpindex) %>%
regulartable(col_keys=c("Type","col1","Number","col2", "Description")) %>%
merge_v(~Type) %>% autofit() %>% width(j=~Description, width=5) %>% empty_blanks()
```
width=
部分可让您控制列的宽度,这样您就可以避免 table 在 Word 中呈现在页面之外。 col1
和 col2
值作为 "dummy" 列存在,以在 table 的列之间创建 space。这是最终 table 的一部分在 WORD 中的样子,因此您可以看到它呈现的效果如何: