使用styleInterval根据选定列的值仅对特定行着色

qrjkbowd  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(95)

我尝试根据当前的值为数据表中的每一行着色。例如,如果使用iris数据集:
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width |种属|
| - ------|- ------|- ------|- ------|- ------|
| 5.1 |三、五|1.4岁|0.2分|塞托萨|
| 4.9 |三个|1.4岁|0.2分|塞托萨|
如果单元格值小于2(在任何列中),我希望第1行中的值显示为红色,否则显示为黑色。最后一列(Species)将被排除。
对于第2行、第3行等,这将是不同的阈值。例如,如果单元格中的值小于4,则第2行将为红色。
我可以按如下方式更改给定行(不包括“物种”列)的颜色:

datatable(iris, options = list(pageLength = 5)) %>% 
  formatStyle(colnames(iris)[-5], target = "cell", color = styleRow(1, 'red'))

但是,如果我尝试将styleInterval添加到格式化中以实现我需要的内容,则不会再有任何内容被着色。如下所示:

datatable(iris, options = list(pageLength = 5)) %>% 
  formatStyle(colnames(iris)[-5], target = "cell", color = styleRow(1, styleInterval(2, c('red','black')))) %>%
  formatStyle(colnames(iris)[-5], target = "cell", color = styleRow(2, styleInterval(4, c('red','black'))))

值得注意的是,我也用target = "row"尝试过上面的方法,但没有成功。
我可以使用它来正常地为列着色,例如,将虹膜数据集转置:

datatable(as.data.frame(t(iris))) %>% formatStyle("V1", color = styleInterval(2, c('red','black'))) %>% formatStyle("V2", color = styleInterval(4, c('red','black')))

但是,我找不到一种方法将彩色数据表转置回来以进行显示。
最后,在我的实际数据表中,我必须根据每行不同的值间隔对几行进行此操作。这也需要适用于不同列数的不同数据集。所以我不认为手动更改每个单元格的CSS颜色是可行的。

ubbxdtey

ubbxdtey1#

library(DT)

datatable(iris, options = list(pageLength = 5)) %>% 
  formatStyle(colnames(iris)[-5], target = "cell", 
              color = styleInterval(2, c('red','black')))  %>% 
  formatStyle(colnames(iris)[-5], target = "cell", 
              color = styleRow(2:nrow(iris), 'black'))

更新:

如果你有多行而不是只有一行需要修改,那么我们可以根据所需的条件创建一个所有颜色的矩阵/数据框,并相应地设置颜色;(关于原始回调函数https://stackoverflow.com/a/60093182/6461462,请参考此答案)。
x一个一个一个一个x一个一个二个x

相关问题