条件格式数据表DT R

Conditional Formatting datatable DT R

本文关键字:DT 数据表 格式 条件      更新时间:2023-09-26

我是r中的DT包的忠实粉丝。我想复制一些Excel条件格式的表格,但发现很难访问样式功能。

具体来说,我希望能够创建一个函数,允许用户调用数据表的行/列,并应用一些条件格式化,类似于如何在excel中完成。对于像我这样的R新手来说,这将是一个非常重要的功能,也可以加快其他人的过程。与热图不同,条件格式对于行/列不都是相同类型的情况很重要,因此您需要单独执行每一行。此外,能够指定什么是高价值和低价值的选项标记也是很好的。

我看到你可以创建换行符,如下面的例子

    # create 19 breaks and 20 rgb color values ranging from white to red
brks <- quantile(df, probs = seq(.05, .95, .05), na.rm = TRUE)
clrs <- round(seq(255, 40, length.out = length(brks) + 1), 0) %>%
  {paste0("rgb(255,", ., ",", ., ")")}
datatable(df) %>% formatStyle(names(df), backgroundColor = styleInterval(brks, clrs))

,但我不知道如何应用到单独的行,虽然它似乎你可以调用他们的名字,如看到这里通过formatStyle()和背景颜色,但你仍然没有阴影梯度,你需要知道行/列的名称,这是有点太多

在我看来,任何创建自定义函数的帮助都将对R数据表社区有很大的帮助。

你可以尝试这样做:

 # create 19 breaks and 20 hex color values ranging from red to green using white around the median
brks <- quantile(df, probs = seq(.05, .95, .05), na.rm = TRUE)
colfunc <- colorRampPalette(c("red","white","green"))
clrs <- colfunc(length(brks) + 1)
datatable(df) %>% formatStyle(names(df), backgroundColor = styleInterval(brks, clrs))

以防有人遇到这个,这里是我写的一个函数,它的功能类似于excel菜单

    column_cond_format = function(col_max, col_min, pal =c('red','white', 'green')) {
  stop_color_max = col_max ##set as max(column)
  stop_color_min = col_min
  brks <- quantile(c(stop_color_min,stop_color_max), probs = seq(.05, .95, .05), na.rm = TRUE) ## set max/min
  myPal = shades::gradient(pal, 18, space="Lab")
  clrs = c(myPal[1] , myPal, myPal[length(myPal)])
  return(list(brks= brks, clrs = clrs))
}

所以backgroundColor参数接受JS_EVAL类,这只是JavaScript,对于上面的代码(使用示例中设置的断点),值如下

"value <= -1.5504 ? 'rgb(255,255,255)' : value <= -0.9689 ? 'rgb(255,244,244)' : value <= -0.7885 ? 'rgb(255,232,232)' : value <= -0.6168 ? 'rgb(255,221,221)' : value <= -0.28425 ? 'rgb(255,210,210)' : value <= -0.1183 ? 'rgb(255,198,198)' : value <= 0 ? 'rgb(255,187,187)' : value <= 0.0754000000000001 ? 'rgb(255,176,176)' : value <= 0.2935 ? 'rgb(255,164,164)' : value <= 0.443 ? 'rgb(255,153,153)' : value <= 0.46745 ? 'rgb(255,142,142)' : value <= 0.5344 ? 'rgb(255,131,131)' : value <= 0.5647 ? 'rgb(255,119,119)' : value <= 0.979 ? 'rgb(255,108,108)' : value <= 1 ? 'rgb(255,97,97)' : value <= 1 ? 'rgb(255,85,85)' : value <= 1.1765 ? 'rgb(255,74,74)' : value <= 1.3743 ? 'rgb(255,63,63)' : value <= 1.65975 ? 'rgb(255,51,51)' : 'rgb(255,40,40)'"

现在,如果有人能帮助我理解我如何改变调色板(说从红色过渡到绿色),我认为实现一个易于使用的功能并不难,尽管我仍然不确定如何可以参考使用其名称旁边的列/行(尽管似乎有一个参数valueColumns,你可以调用