我有张像这样的桌子。
data_wide <-data.frame(id=c(1,2,3,4),book1=c("","","","age"),book2=c("covid","alive","",""),book3=c("","income","","location"))
我试图使用R中的DT包在html中呈现这个表,这样所有的值都是隐藏的,并且可以用鼠标悬停查看。为了进一步澄清,我的目标是根据值保持单元格的背景不同,例如,没有值的单元格可以是淡蓝色的,而具有值的单元格可以是绿色的,当我悬停在绿色单元格上时,我可以查看这个值。以下是我为实现我的目标所作的天真尝试:
library(DT)
library(stringr)
data_wide <- data_wide %>%
mutate(b1 = as.numeric(str_detect(string = book1, pattern = ""))) %>%
mutate(b2 = as.numeric(str_detect(string = book2, pattern = ""))) %>%
mutate(b3 = as.numeric(str_detect(string = book3, pattern = "")))
datatable(data_wide, options = list(columnDefs = list(list(
targets = 2:4,
render = JS(
"function(data, type, row, meta) {",
"return type === 'display' && data.length > 6?",
"'<span title=\"' + data + '\">' + data.substr(0, 20) + '...</span>' : data;",
"}")
))), callback = JS('table.page(3).draw(false);'))%>%
formatStyle(
'book1',"b1",
color = "lightgreen",
border = '2px solid #FFFFFF',
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen'))) %>%
formatStyle(
'book2',"b2",
border = '2px solid #FFFFFF',
color = "lightgreen",
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen'))) %>%
formatStyle(
'book3',"b3",
border = '2px solid #FFFFFF',
color = "lightgreen",
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen')))
作为解释,我添加了b1、b2、b3列,以便借用它们的值来对book1、book2和book3的单元格进行颜色编码。但是,我无法丢弃它们(b1、b2、b3),因为它们不再需要。我尝试过在选项中添加列表(可见=假,target = c(5,6,7),但这似乎不起作用,可能是因为该选项已经被用于启用鼠标悬停?我也研究过这个论坛和其他资源的条件格式,但是看起来这只适用于整数(0,1..etc),而且我在这个表中有字符串。我不知所措,希望能找到解决办法。
希望能在这方面提供任何帮助,并愿意接受其他的想法。
谢谢。
发布于 2022-03-09 22:26:05
好的,我将在这里回答我自己的问题,代码需要在列表中使用@LocoGris指出的"visible = FALSE“的另一个列表。如果没有在列表中添加列表,省略号就会受到影响。
datatable(
data_wide,
plugins = "ellipsis",
options = list(
columnDefs = list(list(
targets = c(2,3,4),
render = JS("$.fn.dataTable.render.ellipsis( 17, false )")
),list(visible=FALSE,targets = c(5,6,7)))
)
)%>%
formatStyle(
'book1',"b1",
color = "lightgreen",
border = '2px solid #FFFFFF',
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen'))) %>%
formatStyle(
'book2',"b2",
border = '2px solid #FFFFFF',
color = "lightgreen",
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen'))) %>%
formatStyle(
'book3',"b3",
border = '2px solid #FFFFFF',
color = "lightgreen",
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen')) )
发布于 2022-03-09 07:54:14
请您试一试:
data_wide <-data.frame(id=c(1,2,3,4),book1=c("","","","age"),book2=c("covid","alive","",""),book3=c("","income","","location"))
library(DT)
library(stringr)
library(dplyr)
data_wide <- data_wide %>%
mutate(b1 = as.numeric(str_detect(string = book1, pattern = ""))) %>%
mutate(b2 = as.numeric(str_detect(string = book2, pattern = ""))) %>%
mutate(b3 = as.numeric(str_detect(string = book3, pattern = "")))
datatable(data_wide, options = list(columnDefs = list(list(
visible=FALSE, targets=c(5,6,7),
render = JS(
"function(data, type, row, meta) {",
"return type === 'display' && data.length > 6?",
"'<span title=\"' + data + '\">' + data.substr(0, 20) + '...</span>' : data;",
"}")
))), callback = JS('table.page(3).draw(false);'))%>%
formatStyle(
'book1',"b1",
color = "lightgreen",
border = '2px solid #FFFFFF',
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen'))) %>%
formatStyle(
'book2',"b2",
border = '2px solid #FFFFFF',
color = "lightgreen",
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen'))) %>%
formatStyle(
'book3',"b3",
border = '2px solid #FFFFFF',
color = "lightgreen",
backgroundColor = styleEqual(c(0, 1), c('lightblue', 'lightgreen')) )
https://stackoverflow.com/questions/71403633
复制相似问题