Data frame to word table?

后端 未结 3 2134
一整个雨季
一整个雨季 2020-12-24 15:45

Is there a way to easily turn a data frame into a Word table via rmarkdown?

If I use rmarkdown in RStudio to create a Word document I get a nicely printed table but

3条回答
  •  清歌不尽
    2020-12-24 16:10

    EDIT: ReporteRs is still maintained but will not evolve anymore. Use officer and flextable instead :

    library(officer)
    library(flextable)
    library(magrittr)
    
    # Create flextable object
    ft <- flextable(data = mtcars) %>% 
      theme_zebra %>% 
      autofit
    # See flextable in RStudio viewer
    ft
    
    # Create a temp file
    tmp <- tempfile(fileext = ".docx")
    
    # Create a docx file
    read_docx() %>% 
      body_add_flextable(ft) %>% 
      print(target = tmp)
    
    # open word document
    browseURL(tmp)
    

    END EDIT

    Hi you can also try package ReporteRs to turn a data.frame into a Word table, the function to do it is FlexTable :

    library(ReporteRs)
    library(magrittr)
    
    docx( ) %>% 
      addFlexTable( mtcars %>%
                      FlexTable( header.cell.props = cellProperties( background.color =  "#003366" ),
                                 header.text.props = textBold( color = "white" ),
                                 add.rownames = TRUE ) %>%
                      setZebraStyle( odd = "#DDDDDD", even = "#FFFFFF" ) ) %>%
      writeDoc( file = "exemple.docx" )
    
    # open the Word document
    browseURL("exemple.docx")
    

    enter image description here

    With markdown, i think this work only with HTML :

    ---
    title: "HTML table"
    output: html_document
    ---
    
    ```{r, results='asis'}
    library(ReporteRs)
    tabl = FlexTable( mtcars,
                      header.cell.props = cellProperties( background.color = "#003366" ),
                      header.text.props = textBold( color = "white" ),
                      add.rownames = TRUE )
    tabl = setZebraStyle( tabl, odd = "#DDDDDD", even = "#FFFFFF" )
    cat(as.html(tabl))
    ```
    

    Here an other example on how to create a word document with ReporteRs :

    library(ReporteRs)
    # Create a docx object
    doc = docx()
    # add a document title
    doc = addParagraph( doc, "A FlexTable example", stylename = "TitleDoc" )
    # add a section title
    doc = addTitle( doc, "How to turn a data.frame into a Word table", level = 1 )
    # some text
    doc = addParagraph( doc, "We use the mtcars dataset as example.", stylename = "DocDefaults" )
    # add a table
    MyFTable = FlexTable( data = mtcars[1:10, ], add.rownames = TRUE )
    # format body content
    MyFTable[3:4, "cyl"] = cellProperties( background.color = "red" )
    MyFTable["Valiant", ] = cellProperties( background.color = "blue" )
    doc = addFlexTable(doc, MyFTable)
    # write the doc
    writeDoc( doc, file = "exemple.docx" )
    # open the Word doc
    browseURL("exemple.docx")
    

    enter image description here

    For more example you can visit http://davidgohel.github.io/ReporteRs/word.html

提交回复
热议问题