提问人:stephr 提问时间:11/4/2023 最后编辑:stephr 更新时间:11/4/2023 访问量:58
如何向我的 flextable 添加百分比?
How can I add percentages to my flextable?
问:
我想将百分比作为另一列添加到我的 flextable 中。我正在使用的对象是一个列表。我是 flextables 的新手,仍在尝试弄清楚它们。我希望百分比包括缺失。
这是我的数据:
table_list<-list(A03.PREDIABETES = structure(list(Var1 = structure(1:2, levels = c("N",
"Y"), class = "factor"), Freq = c(8L, 3L)), class = "data.frame", row.names = c(NA,
-2L)), A03.GOITER = structure(list(Var1 = structure(1L, levels = "N", class = "factor"),
Freq = 11L), class = "data.frame", row.names = c(NA, -1L)),
A03.GESTATIONAL = structure(list(Var1 = structure(1:2, levels = c("N",
"Y"), class = "factor"), Freq = c(9L, 2L)), class = "data.frame", row.names = c(NA,
-2L)), A03.HASHIMOTO = structure(list(Var1 = structure(1L, levels = "N", class = "factor"),
Freq = 11L), class = "data.frame", row.names = c(NA,
-1L)), A03.THYROID = structure(list(Var1 = structure(1:2, levels = c("N",
"Y"), class = "factor"), Freq = c(10L, 1L)), class = "data.frame", row.names = c(NA,
-2L)), A03.HYPERTHYROID = structure(list(Var1 = structure(1:2, levels = c("N",
"Y"), class = "factor"), Freq = c(10L, 1L)), class = "data.frame", row.names = c(NA,
-2L)), A03.HYPOTHYROID = structure(list(Var1 = structure(1L, levels = "N", class = "factor"),
Freq = 11L), class = "data.frame", row.names = c(NA,
-1L)), A03.OTHER = structure(list(Var1 = structure(1:2, levels = c("N",
"Y"), class = "factor"), Freq = c(10L, 1L)), class = "data.frame", row.names = c(NA,
-2L)), A03.NONE = structure(list(Var1 = structure(1:2, levels = c("N",
"Y"), class = "factor"), Freq = c(7L, 4L)), class = "data.frame", row.names = c(NA,
-2L)))
这是我的代码:
library(data.table)
library(tidyverse)
library(dplyr)
library(ggplot2)
library(writexl)
library(anytime)
library(officer)
library(flextable)
doc <- read_docx()
for(i in 1:length(table_list)){
tbl <- table_list[[i]] |>
flextable() |>
set_table_properties(width = 0.5) |>
set_caption(names(table_list)[[i]])
doc <- doc |> body_add_flextable(tbl)
}
print(doc, target = "report.docx")
答:
0赞
nightstand
11/4/2023
#1
您可以将表中的每个除以 。为了避免列文本换行,我用Freq
sum(Freq)
set_table_properties(width = 0.5)
flextable::autofit
library(officer)
library(flextable)
library(dplyr)
doc <- read_docx()
for(i in 1:length(table_list)){
tbl <- table_list[[i]] |>
mutate(percentage = round(Freq/sum(Freq), 2)) |>
flextable() |>
autofit() |>
set_caption(names(table_list)[[i]])
doc <- doc |> body_add_flextable(tbl)
}
print(doc, target="report.docx")
输出:
评论
0赞
stephr
11/4/2023
我稍微调整了一下,乘以 100。否则,这是一个很好的解决方案。也感谢您弄清楚自动改装的事情。我试图弄清楚如何适应它。
1赞
stephr
11/4/2023
for(i in 1:length(table_list)){ tbl <- table_list[[i]] |> mutate(percentage = round((Freq/sum(Freq))*100, 2)) |> flextable() |> autofit() |> set_caption(names(table_list)[[i]]) doc <- doc |> body_add_flextable(tbl) }
0赞
nightstand
11/4/2023
@stephr 当然!我还看到你提到你希望百分比包括“失踪”?你能更具体地介绍一下吗?我也许也可以提供更多信息
1赞
David Gohel
11/4/2023
我建议稍作更改,以避免调用舍入和处理“缺失”标签:... |> mutate(percentage = Freq/sum(Freq)*100) |> flextable() |> colformat_double(digits = 2, na_str = "missing") |> ...
评论