如何在R的reactable中条件式新增列并实现单元格着色
解决方案
先对原始数据做预处理,计算每行的红色单元格数量和全白标记,再结合reactable配置实现所有需求:
library(tidyverse) library(reactable) # 预处理数据,新增统计列 iris_processed <- iris %>% rowwise() %>% mutate( # 统计每行符合红色条件的单元格数量(仅前4个数值列) red_count = sum(c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) > 5 | c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) < 0.1), # 判断是否所有4列都是白色(无红色单元格) all_white = ifelse(red_count == 0, 1, 0) ) %>% ungroup() # 生成reactable表格 reactable( iris_processed, columns = c( # 处理原始数值列的样式 set_names(colnames(iris)[1:4]) %>% map(~ { colDef( style = function(value) { ds_color <- ifelse(value > 5 | value < 0.1, "red", "white") list(background = ds_color) } ) }), # 新增的红色单元格数量列 red_count = colDef(name = "红色单元格数量"), # 新增的全白标记列 all_white = colDef(name = "全白标记"), # 保留Species列的默认样式 Species = colDef() ) )
关键说明
- 数据预处理:用
rowwise()按行处理,对前4个数值列逐一判断是否符合红色条件,用sum()统计每行的红色单元格数量;再根据数量是否为0生成all_white标记值。 - 样式修正:把原有代码里的
<=0.2修正为需求要求的<0.1,确保第一个需求的条件准确。 - 列配置:在
columns参数中同时包含原始数值列、新增统计列和Species列,给新增列设置了更直观的显示名称。
内容的提问来源于stack exchange,提问作者shsh
相关产品推荐
相关产品推荐

