r - 如何调整弹性表格中的垂直对齐方式
问题描述
我正在尝试使用 R Markdown 在 HTML 中生成一个弹性表,该表具有多个单元格,这些单元格使用ReporteRs::spanFlexTableRows()
. 但是,当我将单元格合并在一起时,合并单元格中显示的数字会出现在单元格的顶部。此外,两组(相邻)合并单元格之间的边界消失了。我想知道:
- 如何使每个合并单元格的内容垂直居中,以及
- 如何保留两个合并单元格之间的边界
以下 R 脚本说明了我遇到的问题:
library(tidyverse)
library(ReporteRs)
mtcars[1:4,] %>%
mutate(
x = row.names(mtcars[1:4,]),
var1 = 1,
var2 = 2
) %>%
select(
x, mpg, cyl, disp, var1, var2
) %>%
make_ft %>%
spanFlexTableRows(j=5, from=1, to= 4) %>%
spanFlexTableRows(j=6, from=1, to= 4)
谢谢你的帮助!
解决方案
我对一个密切相关的问题有一个解决方案——使用officer/flextable而不是ReporteRs进行合并和垂直对齐。由于官员/弹性表格旨在取代记者,我认为在此处发布是合理的。
垂直对齐可以在 github(截至 2019-02-10)版本的 flextable 中使用 valign() 直观地完成:
library(tidyverse)
library(officer)
library(flextable)
mtcars[1:4,] %>%
mutate(
x = row.names(mtcars[1:4,]),
var1 = 1,
var2 = 2
) %>%
select(
x, mpg, cyl, disp, var1, var2
) %>%
flextable() %>%
flextable::merge_at(j=5, i=1:4) %>%
flextable::merge_at(j=6, i=1:4) %>%
valign(j = 5:6, valign = 'top') -> myft
myft
flextable 中的垂直对齐历史上(截至 2019-02-10 CRAN 版本)是 flextable::rotate() 函数的一部分。这是您的示例:
library(tidyverse)
# library(ReporteRs)
library(officer)
library(flextable)
# turn into flextable, merge and apply a vertical alignment
# (note that center vertical alignment appears to be the default in flextables
# so despite your goals i do top alignment here)
mtcars[1:4,] %>%
mutate(
x = row.names(mtcars[1:4,]),
var1 = 1,
var2 = 2
) %>%
select(
x, mpg, cyl, disp, var1, var2
) %>%
flextable() %>%
flextable::merge_at(j=5, i=1:4) %>%
flextable::merge_at(j=6, i=1:4) %>%
rotate(j = 5:6, align = 'top', rotation = 'tblr') -> myft
# write to a docx using officer
doc = read_docx()
doc = flextable::body_add_flextable( doc, myft )
print(doc, target = "ftex.docx" )
推荐阅读
- java - 如何显示枚举列表 - SpringBoot
- azure - 无法识别 Azure LoadBalancer DNS 名称
- python - Azure 休息 API。如何从工作项下载附件?Python
- python - 使用变量 X 找到 Y 的最大值
- python - 数组作为 pymoo NSGA-II 单个变量
- javascript - 如何使用 HTML 和 CSS 创建动态方块
- reactjs - 如何在静态 S3/CloudFront 网站托管上呈现动态 Next.js 路径?
- events - 进入可编辑单元格时的 RowSelectionChanged-Event(要求:取决于 F4 OVS)
- node.js - nodejs删除文件:TypeError:promises_1.rm不是函数
- android - Kotlin:无法在列表中获取对象获取器