如何在R中创建基于频次的颜色编码评分者交叉对比表?
实现带频次颜色编码的评分交叉对比表
可以使用R中的gt包(推荐,功能丰富)或formattable包来实现基于频次的颜色编码表格,以下是具体步骤:
方法一:使用gt包(推荐)
gt包提供了灵活的表格样式定制功能,适合创建专业的可视化表格。
步骤1:安装并加载gt包
install.packages("gt") library(gt)
步骤2:转换交叉表为数据框
将table()生成的交叉表转换为适合gt处理的数据框格式:
# 生成交叉表并转换为数据框 cross_tab <- as.data.frame.matrix(table(df$score_assessor1, df$score_assessor2)) # 将行名转为列(显示评分者1的评分) cross_tab$assessor1 <- rownames(cross_tab) # 调整列顺序,将评分者1的评分放在首位 cross_tab <- cross_tab[, c("assessor1", paste(1:9))]
步骤3:创建带颜色编码的表格
根据频次范围定义颜色规则,并应用到表格中:
# 创建样式表格 styled_table <- gt(cross_tab) %>% # 设置列标题 cols_label( assessor1 = "评分者1", `1` = "1", `2` = "2", `3` = "3", `4` = "4", `5` = "5", `6` = "6", `7` = "7", `8` = "8", `9` = "9" ) %>% # 应用频次颜色编码 data_color( columns = 2:10, # 选择需要着色的频次列 colors = scales::col_bin( palette = c("white", "#FFFF00", "#FFA500", "#FF0000"), # 对应规则的颜色:白、黄、橙、红 bins = c(-Inf, 0, 11, 30, Inf), # 划分频次区间:0、1-10、11-29、30+ na.color = "white" ) ) %>% # 添加表格标题(可选) tab_header(title = "两位评分者评分交叉对比表(带频次颜色编码)") # 显示表格 styled_table
方法二:使用formattable包
如果偏好更简洁的语法,可以使用formattable包:
步骤1:安装并加载依赖包
install.packages("formattable") library(formattable) library(dplyr) # 需要用到case_when函数
步骤2:创建颜色格式化函数
# 定义基于频次的颜色规则 color_formatter <- formatter("span", style = x ~ style( background = case_when( x == 0 ~ "white", x > 0 & x < 11 ~ "#FFFF00", x >= 11 & x < 30 ~ "#FFA500", x >= 30 ~ "#FF0000" ) ))
步骤3:生成格式化表格
# 转换交叉表为数据框(同方法一) cross_tab <- as.data.frame.matrix(table(df$score_assessor1, df$score_assessor2)) cross_tab$assessor1 <- rownames(cross_tab) cross_tab <- cross_tab[, c("assessor1", paste(1:9))] # 生成带颜色的表格 formattable(cross_tab, list( `1` = color_formatter, `2` = color_formatter, `3` = color_formatter, `4` = color_formatter, `5` = color_formatter, `6` = color_formatter, `7` = color_formatter, `8` = color_formatter, `9` = color_formatter ))
自定义调整
- 可以修改颜色的十六进制代码(如
#FFFF00为黄色)来匹配你的需求。 - 调整
bins参数或case_when中的条件,以适配不同的频次区间划分。
内容的提问来源于stack exchange,提问作者esptang
相关产品推荐
相关产品推荐

