如何在R的flextable中调整行列位置并实现排序操作
R flextable 行列位置调整操作指南
以下操作均仅依赖flextable包即可实现,无需调用其他表格处理工具:
首先创建示例表格:
library(flextable) ft <- flextable(head(mtcars))
1. 将hp列移动到mpg与cyl之间
使用flextable内置的move_col()函数完成列位置调整:
# after参数指定插入到对应列的后方,before参数可指定插入到对应列的前方 ft <- move_col(ft, j = "hp", after = "mpg")
2. 将第三行移动为第一行
可以通过两种方式实现:
方式1:无额外依赖的原生方法
直接修改flextable存储的数据集后重建表格:
# 取出表格内置数据集 df <- ft$body$dataset # 调整行顺序 df <- df[c(3, 1, 2, 4, 5, 6), ] # 重新生成flextable ft <- flextable(df)
方式2:兼容dplyr语法的简便方法
library(dplyr) ft <- slice(ft, c(3, 1, 2, 4, 5, 6)) # 通用写法(适配任意长度表格): # ft <- slice(ft, c(3, setdiff(1:nrow(ft), 3)))
3. 按照wt列对表格内容排序
同样支持两种实现方式:
方式1:无额外依赖的原生方法
df <- ft$body$dataset df <- df[order(df$wt), ] ft <- flextable(df) # 降序排序可改为 order(-df$wt) 或者 order(df$wt, decreasing = TRUE)
方式2:兼容dplyr语法的简便方法
library(dplyr) # 升序排序 ft <- arrange(ft, wt) # 降序排序写法:ft <- arrange(ft, desc(wt))
链式操作示例
如果需要同时完成三个操作,可通过管道符简化代码:
library(flextable) library(dplyr) library(magrittr) ft <- flextable(head(mtcars)) %>% move_col(j = "hp", after = "mpg") %>% slice(c(3, 1, 2, 4, 5, 6)) %>% arrange(wt)
内容的提问来源于stack exchange,提问作者Tripartio
相关产品推荐
相关产品推荐

