【问题标题】:How to fit flextable to the width of the side borders in the word_document output? Rmarkdown如何使 flextable 适合 word_document 输出中侧边框的宽度?降价
【发布时间】:2022-01-18 03:01:53
【问题描述】:

我在 Rmarkdown 中使用flextable() 来创建表格。我将我的代码编织到 word_document 输出。有谁知道如何使表格的宽度不适合内容,而是适合 word_document 输出中侧边框的宽度?

---
title: ""
output: word_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(flextable)
library(dplyr)
```

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```{r cars}
head(cars)%>%
  flextable()%>%
  theme_box()%>%
  autofit()

```

下面我附上两张图:

  • 第一个 - 我的代码生成的,
  • 第二个 - 我想要制作的东西

谢谢!

【问题讨论】:

    标签: r r-markdown flextable


    【解决方案1】:

    there,David Gohel 为这项任务做了一个很好的函数 :)

    举个例子:

    ```{r cars}
    head(cars) %>% 
      flextable %>%
      width(., width = 3.35) %>% 
      theme_box() 
    ```
    

    【讨论】:

    • 非常感谢,您的建议很有帮助!但是,我正在寻找一种不依赖于表中列数的解决方案。根据您的建议,我编写了一个完全符合我要求的代码:stackoverflow.com/a/70358715/14807779
    • 嗨,门罗!以下是在r-markdown word_document 输出中拟合flextable() 的更有用的解决方案:stackoverflow.com/a/70374586/14807779 因为我经常在 MS Word 中使用表格,我希望将来可以在flextable 包中作为功能。
    【解决方案2】:

    基于manro 解决方案,我编写了一个代码,该代码使表格具有给定宽度,无论表格中有多少列。这也是我的目标,我可能没有在我的问题中明确解释。

    ```{r cars}
     i = 16.5 # width of the side borders in the word_document output (in centimeters)
     w = i*0.3937 # width of the side borders in the word_document output (in inches)
     
        # Table 1 with 2 columns 
        head(cars,3) %>% 
          flextable %>%
          width(., width = (w/(ncol(cars)))) %>% 
          theme_box() 
           
        # Table 2 with 5 columns
        head(iris,3) %>% 
          flextable %>%
          width(., width = (w/(ncol(iris)))) %>% 
          theme_box() 
    ```
    

    【讨论】:

    • 很好,您的解决方案更精确,“+1”;)
    【解决方案3】:

    word_document 输出中根据列内容和侧边框来适应列宽的解决方案

    ---
    
    title: ""
    output: word_document
    ---
    
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = TRUE)
    library(flextable)
    library(dplyr)
    ```
    
    ## R Markdown
    
    This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
    
    
    ```{r cars}
     i = 16.5 # width of the side borders in the word_document output (in centimeters)
     w = i*0.3937 # width of the side borders in the word_document output (in inches)
     
    df <- data.frame('model' = rownames(mtcars), mtcars[1:5])
    t<-flextable(head(df,3))
    t #not fitted table, all cols have the same base widths
    t<-autofit(t)
    t #auto-fitted, cols have the widths based on col content
    #get column widths proportions from auto-fitted table
    auto_widths <- dim(t)$widths/sum(dim(t)$widths)
    # fit col widths based on col content and side borders in the word_document output
    t<-width(t,  width=w*auto_widths)
    t
    ```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2012-09-18
      • 2022-01-25
      • 1970-01-01
      • 2019-01-22
      • 2022-08-03
      • 2023-03-30
      相关资源
      最近更新 更多