我有一个像下面这样的数据框,其中一列表示一个大的“组”,另一列表示该组中某人所在的“团队”,另外一列表示其在不同时间段的支出。
data <- data.frame("Team" = c("Alex", "Beth", "Andrew", "Bert"),
"Group" = c("A","B","A","B"),
"Spending_Q1" = c(1000, 500, 1500, 1000),
"Spending_Q2" = c(500, 2000, 1000, 500))
使用DT包,我想根据Spending_Q1和Spending_Q2列各自的值(使用渐变:为更高的值使用较深的颜色)为列着色,但为每个团队使用不同的颜色。我已经能够完成大多数操作,对所有值应用相同的颜色渐变(例如蓝色阴影),但是不确定是否可以将阴影限制为特定的和列。有人可以建议吗?
我已经咨询了RStudio guide to data table styling,但是它没有任何示例为特定的行和列指定阴影。
谢谢!
答案 0 :(得分:0)
这是一种方法。渲染无法在RStudio中使用,但可以在浏览器中使用。
library(DT)
dat <- data.frame(
"Team" = c("Alex", "Beth", "Andrew", "Bert"),
"Group" = c("A","B","A","B"),
"Spending_Q1" = c(1000, 500, 1500, 1000),
"Spending_Q2" = c(500, 2000, 1000, 500),
"Spending_Q3" = c(500, 1000, 1500, 1500)
)
columns <- c(3, 4, 5) # columns we want to colorize
nrows <- nrow(dat)
rowCallback <- c(
"function(row, data, index){",
sprintf(" var columns = [%s];", toString(columns)),
" var min = data[columns[0]];",
" var max = data[columns[0]];",
" for(let i = 1; i < columns.length; i++){",
" min = Math.min(min, data[columns[i]]);",
" max = Math.max(max, data[columns[i]]);",
" }",
sprintf(" var nrows = %d;", nrows),
" var h = index * 360/nrows;",
" for(let i = 0; i < columns.length; i++){",
" var j = columns[i];",
" var l = 75 - 50*(data[j]-min)/(max-min);",
" var color = 'hsl(' + h + ', 100%, ' + l + '%)';",
" $('td:eq(' + j + ')', row).css('background-color', color);",
" }",
"}"
)
datatable(
dat,
options = list(
rowCallback = JS(rowCallback),
columnDefs = list(
list(className = "dt-center", targets = "_all")
)
)
)