数据表 R 中的条件格式化

问题描述 投票:0回答:1

我有一个与此类似的数据框:

data <- data.frame(
  Time = c(1, 2, 3, 4, 5, 6, 7, 8),
  Rider = c("Rider1", "Rider2", "Rider3", "Rider4", "Rider1", "Rider2", "Rider3", "Rider4"),
  Rider1 = c(10, 20, 15, 25, 30, 45, 30, 43),
  Rider2 = c(12, 22, 14, 24, 32, 30, 56, 75),
  Rider3 = c(9, 19, 11, 21, 29, 40, 20, 19),
  Rider4 = c(11, 21, 13, 23, 31, 29, 40, 20)
)

我正在制作一个 rmd,并希望使用 R 中的

DT
包将此数据框显示为数据表。我想格式化该表,使其看起来像这样,其中 Rider 列中的行与该列相匹配的值名称突出显示(理想情况下更改背景颜色):

我已经尝试过这个和其他一些选项,但没有成功。

datatable(data) %>%
  formatStyle(
    columns = c("Rider1", "Rider2", "Rider3", "Rider4"),
    valueColumns = "Rider",
    backgroundColor = styleEqual(data$Rider, c("Rider1" = "yellow", "Rider2" = "lightblue", "Rider3" = "lightgreen", "Rider4" = "lightpink"))
  )

如有任何建议,我们将不胜感激,如果

DT
不起作用,甚至可以提供不同的餐桌套餐。谢谢!

r datatable conditional-formatting dt
1个回答
0
投票

从附加列中获取颜色值,并使用 forloop 为每列分配背景颜色:

#matrix with diagonal values set to colours
m <- matrix(NA, nrow = 4, ncol = 4)
diag(m) <- "red"
#      [,1]  [,2]  [,3]  [,4] 
# [1,] "red" NA    NA    NA   
# [2,] NA    "red" NA    NA   
# [3,] NA    NA    "red" NA   
# [4,] NA    NA    NA    "red"

#make dt object hiding colour columns
x <- datatable(cbind(data, rbind(m, m)),
               options = list(columnDefs = list(list(visible = FALSE, 
                                                     targets = 7:10))))

#loop through columns and set colour from colour columns 7:10
for(i in 3:6){
  x <- x %>%
    formatStyle(i, valueColumns = i + 4, backgroundColor = JS("value"))
}

x

© www.soinside.com 2019 - 2024. All rights reserved.