使用“flextable”更改在稀疏表中打印零的方式
Changing how zeros are printed in sparse tables using `flextable`
我使用 knitr 中的 kable()
在 Microsoft Word 中生成了漂亮的 table 输出。但是,kable()
被设计为一个简单的 table 生成器,无法提供 flextable 具有的所有高级功能;例如,包含页脚。
有时,我想打印一个过于稀疏的 table 并将其包含在 Microsoft Word 文档中。我不想打印零,而是想使用 prettyNum()
.
中的 zero.print
参数来抑制它们
对于 kable
,我可以添加一个 format.arg()
参数来指定是否打印零(传递给 format()
,然后传递给 prettyNum()
。
是否可以在 flextable 中添加类似的功能?这将使 flextable 可以做 kable
可以做的所有事情,然后再做一些,使它成为一个有价值的包。最好添加的函数可能是 colformat_num()
。是否可以添加一个 ...
参数,将附加参数传递给 prettyNum()
或 formatC()
?
A <- tibble::as_tibble(matrix(c(rep(0, 9), rep(1,3)), nrow = 4, dimnames = list(NULL, LETTERS[1:3])))
knitr::kable(A, caption = "Example -- with zeros")
A B C
0 0 0
0 0 1
0 0 1
0 0 1
Example – with zeros
knitr::kable(A, caption = "Example -- zeros suppresed. A pattern in this example table is more easy to spot",
format.args = list(zero.print = ".") #Make all the zeros be a dot.
)
A B C
. . .
. . 1
. . 1
. . 1
Example – zeros suppressed. A pattern in this example table is easier to spot
flextable::flextable(A)
我们可以在用 flextable
包包装之前准备好我们的数据。
```{r}
library(tidyverse)
library(flextable)
A <- tibble::as_tibble(matrix(c(rep(0, 9), rep(1,3)), nrow = 4, dimnames = list(NULL, LETTERS[1:3])))
A1 <- A %>% mutate_if(is.numeric, str_replace_all, pattern = "0", replacement = ".")
flextable(A1) %>%
set_caption(., "I'm a beautiful table")
```
您可以使用任何已定义的格式化程序并将其与函数一起使用 set_formatter()
。
library(tidyverse)
library(flextable)
A <- tibble::as_tibble(matrix(c(rep(0, 9), rep(1,3)), nrow = 4, dimnames = list(NULL, LETTERS[1:3])))
fun <- function(x) {
z <- formatC(x)
z[x < 0.001] <- "."
z
}
fun_all_cols <- lapply(colnames(A), function(x) fun)
names(fun_all_cols) <- colnames(A)
flextable(A) %>%
set_formatter(values = fun_all_cols)
我使用 knitr 中的 kable()
在 Microsoft Word 中生成了漂亮的 table 输出。但是,kable()
被设计为一个简单的 table 生成器,无法提供 flextable 具有的所有高级功能;例如,包含页脚。
有时,我想打印一个过于稀疏的 table 并将其包含在 Microsoft Word 文档中。我不想打印零,而是想使用 prettyNum()
.
zero.print
参数来抑制它们
对于 kable
,我可以添加一个 format.arg()
参数来指定是否打印零(传递给 format()
,然后传递给 prettyNum()
。
是否可以在 flextable 中添加类似的功能?这将使 flextable 可以做 kable
可以做的所有事情,然后再做一些,使它成为一个有价值的包。最好添加的函数可能是 colformat_num()
。是否可以添加一个 ...
参数,将附加参数传递给 prettyNum()
或 formatC()
?
A <- tibble::as_tibble(matrix(c(rep(0, 9), rep(1,3)), nrow = 4, dimnames = list(NULL, LETTERS[1:3])))
knitr::kable(A, caption = "Example -- with zeros")
A B C
0 0 0
0 0 1
0 0 1
0 0 1
Example – with zeros
knitr::kable(A, caption = "Example -- zeros suppresed. A pattern in this example table is more easy to spot",
format.args = list(zero.print = ".") #Make all the zeros be a dot.
)
A B C
. . .
. . 1
. . 1
. . 1
Example – zeros suppressed. A pattern in this example table is easier to spot
flextable::flextable(A)
我们可以在用 flextable
包包装之前准备好我们的数据。
```{r}
library(tidyverse)
library(flextable)
A <- tibble::as_tibble(matrix(c(rep(0, 9), rep(1,3)), nrow = 4, dimnames = list(NULL, LETTERS[1:3])))
A1 <- A %>% mutate_if(is.numeric, str_replace_all, pattern = "0", replacement = ".")
flextable(A1) %>%
set_caption(., "I'm a beautiful table")
```
您可以使用任何已定义的格式化程序并将其与函数一起使用 set_formatter()
。
library(tidyverse)
library(flextable)
A <- tibble::as_tibble(matrix(c(rep(0, 9), rep(1,3)), nrow = 4, dimnames = list(NULL, LETTERS[1:3])))
fun <- function(x) {
z <- formatC(x)
z[x < 0.001] <- "."
z
}
fun_all_cols <- lapply(colnames(A), function(x) fun)
names(fun_all_cols) <- colnames(A)
flextable(A) %>%
set_formatter(values = fun_all_cols)