r - 根据重复数据将数据表中的单元格颜色更改为不同的颜色
问题描述
我有以下可以在 R 中运行的代码。它是一个数据表,我根据它们是否等于列中的任何其他值来更改单元格的颜色。到目前为止,我能够根据它们的值更改某些单元格的颜色(到目前为止仅变为红色),仅针对输入的给定列名(Sepal.Length,Sepal.Width)。我正在尝试将同一列中的所有重复项着色为相同的颜色,但不同重复项的颜色不同。
Sepal.Length Sepal.Width
3 9
4 3
5 3
3 4
8 9
4 1
3 2
例如 Sepal.Length 中的 3,我希望它是红色的,但 Sepal.Width 中重复的 3 是不同的颜色。有任何想法吗?
library(DT)
data2 <- cbind(ID = "ID",iris[,1:4])
getNumber <- function(colname, df) {
which( colnames(df)==colname )
}
getCondition<-function(col, df) {
lines <- ''
lines = paste0(lines, apply(df[col], 2, function(i) {
line <- paste('value == ', i)
}))
conidtion <- paste0(lines)
print(conidtion)
}
names <- c("Sepal.Length", "Sepal.Width")
JSfunc <- paste0("function(row, data) {\n",
paste(sapply(names,function(i) paste0(
"var value=data['",getNumber(i, data2) -1,"'];
if (value!==null) $(this.api().cell(row,'",getNumber(i, data2) - 1,
"').node()).css({'background-color': ", getCondition(i, data2) ," ? 'red' : ''});\n")
), collapse = "\n"),"}" )
datatable(
data2, rownames = FALSE, class = 'cell-border stripe',
options = list(
dom = 't', pageLength = -1, lengthMenu = list(c(-1), c('All')),
rowCallback=JS(JSfunc)
)
)
解决方案
我可以通过管道 formatStyle 在 JS 之外完成
library(DT)
data2 <- cbind(ID = "ID",iris[,1:4])
datatable(data2,
rownames = FALSE,
class = 'cell-border stripe',
options = list(dom = 't',
pageLength = -1,
lengthMenu = list(c(-1), c('All')))) %>%
formatStyle(columns = 'Sepal.Length',
valueColumns = 'Sepal.Length',
backgroundColor = styleEqual(levels = c(5),
values = c('red'))) %>%
formatStyle(columns = 'Sepal.Width',
valueColumns = 'Sepal.Width',
backgroundColor = styleEqual(levels = c(3),
values = c('yellow')))
推荐阅读
- jmeter - 使用 Jmeter 进行性能测试 - 根据要求调整脚本
- qt - 使用 Popup 投射阴影
- php - 检查是否只有一个变量大于 PHP 中的另一个变量
- angular - Angular Pipe 和 TypeScript 类型保护
- c# - 将导出的 CngKey 导入 RSA 并再次导出
- java - 所有项目的 maven 依赖关系直方图(使用频率如何)
- python - Python:rdkit 库缺少许多功能
- python - 我如何使用 Selenium Python 遍历每个谷歌搜索页面,但它没有发生
- jhipster - 将 JHipster 实体子生成器集成到现有项目中
- python - Django - 获取登录用户组的列表。没有数据或“无法将关键字‘组’解析到字段中。选项有:id、名称、权限、用户”