css - 使用 DT 包根据列的分位数为列的单元格着色,并对任何列执行此操作

标签 css r formatting background-color dt

我想根据分位数为表格的每一列的单元格着色,并对每一列进行着色。对于这个练习,我一直在使用 DT 包。

您将在下面找到一个可重现的示例,该示例根据整个表格的数字分位数对单元格进行着色:

set.seed(1)
df = as.data.frame(cbind(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE)))
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(cuts=brks,values=clrs))

我想做同样的事情,但基于列。这是我为此编写的代码:

set.seed(1)
df = as.data.frame(cbind(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE)))
brks <- apply(df,MARGIN=2,FUN=quantile,probs=seq(.05, .95, .05))
clrs <- round(seq(255, 40, length.out = nrow(brks)), 0) %>% {paste0("rgb(255,", ., ",", ., ")")}
r=replicate(ncol(brks),clrs)
r=as.vector(r)
r=append(r,"rgb(255,20,20)")
brks <- as.vector(brks)
datatable(df) %>% formatStyle(names(df), backgroundColor = styleInterval(cuts=brks,values=r))

我开始在列上应用以获取基于列的分位数 (brks) 并创建匹配的复制颜色 (r)。然后我将这些矩阵作为向量,因为 styleInterval 只接受向量。此外,我向向量 r 添加了一个新元素,因为我认为 styleInterval 的参数“values”应该比参数“cuts”多包含一个元素。

我的代码有一些问题,尤其是出现“剪辑必须越来越多地排序”。有没有人想解决这个问题?

最佳答案

这段代码可以解决问题,它为我的向量 brksclrs 的每个第 i 个元素应用颜色和 eval 函数:

set.seed(1)
df <- cbind.data.frame(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE))
brks <- apply(df, 2, quantile, probs=seq(.05, .95, .05), na.rm=T)
clrs <- apply( brks, 2, function(x) round(seq(255, 40, length.out = length(x)+1), 0) %>% {paste0("rgb(255,", ., ",", ., ")")})
eval(parse(text=paste0("datatable(df) ", paste(sapply(1:ncol(df), function(i) paste0("%>% formatStyle(names(df)[",i,"], backgroundColor = styleInterval(brks[,",i,"], clrs[,",i,"]))") ), collapse = " " ))))

关于css - 使用 DT 包根据列的分位数为列的单元格着色,并对任何列执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897107/

相关文章:

r - 在 Rstudio 中自动在等号或箭头之间添加额外空格

linux - 作为参数传递时删除字符串的内部引号

html - 将段落宽度限制为其父 div

css - SASS 复合选择器导致错误

r - dbplyr 中 database.table 的语法?

algorithm - 找到最近的nice number

algorithm - 需要一种算法来拆分一系列数字

css - 改变相对固定的位置,反之亦然

javascript - 单击时更改表格行的颜色

r - apply() 和 adply() 的不同输出