首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用if of对单元格进行条件格式化?或隐藏R中DT包中的列

使用if of对单元格进行条件格式化?或隐藏R中DT包中的列
EN

Stack Overflow用户
提问于 2022-03-09 02:27:40
回答 2查看 127关注 0票数 0

我有张像这样的桌子。

代码语言:javascript
运行
复制
data_wide <-data.frame(id=c(1,2,3,4),book1=c("","","","age"),book2=c("covid","alive","",""),book3=c("","income","","location"))

我试图使用R中的DT包在html中呈现这个表,这样所有的值都是隐藏的,并且可以用鼠标悬停查看。为了进一步澄清,我的目标是根据值保持单元格的背景不同,例如,没有值的单元格可以是淡蓝色的,而具有值的单元格可以是绿色的,当我悬停在绿色单元格上时,我可以查看这个值。以下是我为实现我的目标所作的天真尝试:

代码语言:javascript
运行
复制
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),而且我在这个表中有字符串。我不知所措,希望能找到解决办法。

希望能在这方面提供任何帮助,并愿意接受其他的想法。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-09 22:26:05

好的,我将在这里回答我自己的问题,代码需要在列表中使用@LocoGris指出的"visible = FALSE“的另一个列表。如果没有在列表中添加列表,省略号就会受到影响。

代码语言:javascript
运行
复制
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')) )
票数 0
EN

Stack Overflow用户

发布于 2022-03-09 07:54:14

请您试一试:

代码语言:javascript
运行
复制
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')) )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71403633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档