在R语言中按条件为flextable表格数据设置颜色
基于均值的flextable单元格文字颜色格式化方案
给定数据集
以下是你提供的两个R数据集:
grades <- structure(list(Grade = c("9th Grade (Freshman)", "10th Grade (Sophomore)", "11th Grade (Junior)", "12th Grade (Senior)"), Read = c(13.2, 10, 8.1, 8.8), Calculate = c(15.4, 17.4, 5.3, 190), Draw = c(9, 7.9, 3.3, 50), Write = c(21.2, 44.5, 31, 19.5)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L)) mean_grades <- structure(list(`Total USA` = "Mean", Read = 10.025, Calculate = 57.025, Draw = 17.55, Write = 29.05), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -1L))
需求说明
将grades数据集中的数值型列(Read、Calculate、Draw、Write)与mean_grades对应列的均值做比较:
- 小于对应均值的单元格文字设为红色
- 大于对应均值的单元格文字设为绿色
最终以flextable格式呈现表格,同时可将均值行合并到表格中。
完整实现代码
library(flextable) library(dplyr) # 提取均值向量(排除非数值列) mean_vals <- unlist(mean_grades[, -1]) # 创建flextable并设置条件颜色 ft <- flextable(grades) %>% # 为Read列设置颜色 color(i = Read < mean_vals["Read"], j = "Read", color = "red") %>% color(i = Read > mean_vals["Read"], j = "Read", color = "green") %>% # 为Calculate列设置颜色 color(i = Calculate < mean_vals["Calculate"], j = "Calculate", color = "red") %>% color(i = Calculate > mean_vals["Calculate"], j = "Calculate", color = "green") %>% # 为Draw列设置颜色 color(i = Draw < mean_vals["Draw"], j = "Draw", color = "red") %>% color(i = Draw > mean_vals["Draw"], j = "Draw", color = "green") %>% # 为Write列设置颜色 color(i = Write < mean_vals["Write"], j = "Write", color = "red") %>% color(i = Write > mean_vals["Write"], j = "Write", color = "green") %>% # 添加均值行到表格底部 add_row(values = c("Mean", mean_vals), top = FALSE) %>% # 自动调整列宽 autofit() # 查看结果 ft
代码说明
mean_vals:提取mean_grades中的数值型均值,方便后续逐列调用比较color()函数:通过i参数指定行条件(数值与均值的大小关系),j参数指定目标列,设置对应文字颜色add_row():将均值行添加到表格底部,使数据对比更直观autofit():自动调整表格列宽,优化显示效果
内容的提问来源于stack exchange,提问作者sonia67
相关产品推荐
相关产品推荐

