我正在尝试从表对象生成一个弹性表(Rmarkdown 到 Word),而无需“as_flextable.table”附带的额外列。这是我到目前为止所拥有的:
xt<- xtabs(~mpg + cyl, head(mtcars))
ft<- as_flextable(xt, include.row_percent = FALSE, include.column_percent = FALSE, include.table_percent = FALSE)
ft
从中我可以使用“delete_rows”和“delete_columns”来删除“Total”行和列。
ft<- delete_rows(ft, i = 6, part = "body")
ft<- delete_columns(ft, j = 5)
如何恢复到原始格式,其中“cyl”跨越圆柱列,并且只有一个“mpg”标题?
这是实现您想要的结果的一种选择:
merge_v
和 merge_h
fix_border_issues
。library(flextable)
xt <- xtabs(~ mpg + cyl, head(mtcars))
ft <- as_flextable(xt,
include.row_percent = FALSE,
include.column_percent = FALSE,
include.table_percent = FALSE
)
ft <- delete_rows(ft, i = 6, part = "body")
ft <- delete_columns(ft, j = 5)
ft <- flextable::merge_v(ft, j = 1, part = "header")
ft <- flextable::merge_h(ft, i = 1, part = "header")
# Add bottom border
ft <- hline_bottom(ft,
j = seq_len(ncol_keys(ft)),
border = officer::fp_border(
color = "#666666",
width = 1.5
)
)
# Remove right border
ft <- vline_right(ft,
i = seq_len(nrow_part(ft, "body")),
border = officer::fp_border(width = 0),
part = "body"
)
ft <- vline_right(ft,
i = seq_len(nrow_part(ft, "header")),
border = officer::fp_border(width = 0),
part = "header"
)
# Fix border issues
ft <- flextable::fix_border_issues(ft)
ft
编辑这是自定义函数的可能方法:
my_flextable <- function(xt) {
ft <- as_flextable(xt,
include.row_percent = FALSE,
include.column_percent = FALSE,
include.table_percent = FALSE
)
ft <- delete_rows(ft, i = nrow_part(ft, part = "body"), part = "body")
ft <- delete_columns(ft, j = ncol_keys(ft))
ft <- flextable::merge_v(ft, j = 1, part = "header")
ft <- flextable::merge_h(ft, i = 1, part = "header")
# Add bottom border
ft <- hline_bottom(ft,
j = seq_len(ncol_keys(ft)),
border = officer::fp_border(
color = "#666666",
width = 1.5
)
)
# Remove right border
ft <- vline_right(ft,
i = seq_len(nrow_part(ft, "body")),
border = officer::fp_border(width = 0),
part = "body"
)
ft <- vline_right(ft,
i = seq_len(nrow_part(ft, "header")),
border = officer::fp_border(width = 0),
part = "header"
)
# Fix border issues
ft <- flextable::fix_border_issues(ft)
ft
}