---
title: "ztable Update"
author: "Keon-Woong Moon"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{ztable_update}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = NA
)
```

# Introduction

If you are unfamiliar to ztable, please read the ztable vignette: https://CRAN.R-project.org/package=ztable/vignettes/ztable.html

## Installation

You can install R package "ztable" from CRAN. Current version is 0.1.8.

```{r,eval=FALSE}
install.packages("ztable")
```

You can install the developmental version of ztable from github. Current github version is 0.1.9.
```{r,eval=FALSE}
if(!require(devtools)) install.packages("devtools")
devtools::install_github("cardiomoon/ztable")
```


## Make table from a data.frame

Package "ztable" make everything possible about table. Basically, An object of "ztable" made from a data.frame. The default output format of ztable is RStudio::viewer or web-browser format(type="viewer"). So if you want to use ztable in a "html" format, you should change the parameter ztable.type to "html". If you want to use ztable in latex format, you should change the parameter ztable.type to "latex". 

```{r,results='asis'}
library(ztable)
library(magrittr)
options(ztable.type="html")
z=ztable(head(iris),caption="Table 1. Basic Table")
z
```

## Use background and font color

You can change background color and font color with bg and color arguments in addRowColor(), addColColor() and addCellColor() functions.

```{r,results='asis'}
ztable(head(iris),caption="Table 2. Table with desired background and font colors") %>%
    addRowColor(rows=1,bg="#C90000",color="white") %>%
    addCellColor(rows=3,cols=c(4,6), bg="cyan",color="red") 
```

## Conditional Formatting

You can select rows with logical expression. You can select cols with column name.

```{r,results='asis'}
ztable(head(iris),caption="Table 3. Conditinoal Formatting: Sepal.Width >= 3.5") %>%
    addRowColor(rows=1,bg="#C90000",color="white") %>%
    addCellColor(condition=Sepal.Width>=3.5,cols=Sepal.Width,color="red") 
```


```{r,results='asis'}
ztable(head(mtcars),caption="Table 4. Cars with mpg > 21 ") %>%
    addCellColor(condition=mpg>21,cols=1:2,bg="cyan",color="red") 
```


## Use of color palette

You can use color palettes from RColorBrewer packages. You can extract colors from palette by using palette2colors() function.

```{r}
require(RColorBrewer)

reds=palette2colors("Reds")
reds
```

You can use the extracted colors to your ztable.

```{r,results='asis'}
ztable(head(iris),caption="Table 5. Use of color palette") %>% 
    addColColor(bg=reds)

ztable(head(mtcars),caption="Table 6. Use of color palette(2)") %>%
    addRowColor(bg=palette2colors("Set3"))
```

## Make a flextable from a ztable

You can use ztable for html and latex output. But it is impossible to use ztable in `Microsoft Word` or `Microsoft Powerpoint` output directly. The `officer` package by David Gohel makes it possible to access and manipulate `Microsoft Word` or `Microsoft Powerpoint` document. You can insert a flextable object office documents with officer package.

```{r}
require(officer)
require(flextable)

ft=regulartable(head(iris))
ft
```

You can make a 'Microsoft Word' document  with this flextable. 

```{r,eval=FALSE}
read_docx() %>%
    body_add_flextable(ft) %>%
    print(target = "flextable.docx")
```

You can convert an object of class ztable to a flextable object. 

```{r,results='asis'}
cgroup=c("Sepal","Petal","Species")
n.cgroup=c(2,2,1)
z <- ztable(head(iris),caption="Table 9. Use of column groups") %>%
    addcgroup(cgroup=cgroup,n.cgroup=n.cgroup,color=c("red","green","blue")) %>%
    spanRow(col=4,from=2,to=3,bg="cyan") %>%
    spanCol(row=5,from=2,to=3,bg="cyan",color="blue")
z
ztable2flextable(z)
```


```{r,results='asis'}
fit <- lm(mpg ~ cyl + disp + wt + drat + am, data=mtcars)
z=ztable(fit,caption="Table 10. Results of Multiple Regression Analysis ")
z
ztable2flextable(z)
```

You can change the color of rows in which p value is below the desired level(default value is 0.05).

```{r,results='asis'}
z1=z %>% addSigColor
z1
ztable2flextable(z1) %>% autofit()
```

You can change the significant level and background and font color.

```{r,results='asis'}
z2= z %>% addSigColor(level=0.01,bg="yellow",color="red")
z2
ztable2flextable(z2) 

```

For more options of flextable, please read the flextable vignette at https://davidgohel.github.io/flextable/index.html.