R语言flextable包如何动态选择列设置居中对齐
R中flextable动态选择第二列到最后一列设置对齐的方法
问题场景
在R中使用flextable包制作表格时,最初通过手动写死列索引j = 2:8的方式将数值列设置为居中对齐,代码如下:
library(tidyverse) library(flextable) data <- structure(list(Category = structure(1:2, levels = c("Baseline", "Alternate"), class = "factor"), `2022 Q2` = c("6%", "6.4%"), `2022 Q3` = c("6.5%", "6.7%"), `2022 Q4` = c("6.4%", "6.6%" ), `2023 Q1` = c("5.7%", "5.5%"), `2023 Q2` = c("4.5%", "4.8%" ), `2023 Q3` = c("4.2%", "4.7%"), `2023 Q4` = c("4%", "4.6%" )), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame" )) data %>% flextable() %>% align(j = 2:8, align = "center")
这种写死索引的方式在表格列数变动时需要手动修改参数,想要实现动态选中第二列到最后一列的效果,尝试套用dplyr语法写align(j = 2:n(), align = "center")时会因为不符合flextable语法规则报错。
可行解决方案
以下两种写法都不需要手动写死列范围,可直接使用:
- 方法1:负索引排除第一列
flextable的j参数原生支持R的负索引规则,传入-1就代表排除第1列、选中剩余所有列,写法最简洁:data %>% flextable() %>% align(j = -1, align = "center") - 方法2:用
ncol()动态获取总列数
如果更习惯正向选择索引,可以用ncol()读取原始数据的总列数,自动生成从2到最后一列的索引范围,后续数据集增删列也不需要修改代码:data %>% flextable() %>% align(j = 2:ncol(data), align = "center")
注:
n()是dplyr包专属的函数,仅能在dplyr的数据处理动词(如mutate()、summarise())内部使用,flextable的相关函数不会识别该函数,因此直接套用会报错。
内容的提问来源于stack exchange,提问作者Tanga94
相关产品推荐
相关产品推荐

