【问题标题】:Highlight Predefined Words in Shiny DT table [Not through Search Highlight] [closed]突出显示闪亮 DT 表中的预定义词 [不通过搜索突出显示] [关闭]
【发布时间】:2018-07-23 08:01:56
【问题描述】:

我正在创建一个闪亮的应用程序,我想在闪亮的 DT 表中突出显示某些预定义的单词。我知道 DT 中的 搜索高亮 功能。例如:

datatable(mtcars2, options = list(searchHighlight = TRUE, search = list(search = 'da')))

我想像前面的示例一样突出显示,但不是来自搜索。例如,在 mtcars 数据中,我想突出显示词 'Merc'、'Fiat'、'Honda',而不在 搜索 中提供的表。表格一出现,就会突出显示单词,而不是整个单元格。

有没有办法做到这一点?

【问题讨论】:

  • 请阅读并编辑您的问题:How to make a great R reproducible example?。添加shinyDT 的代码和预定义词的示例
  • 包含单词高亮的单元格是否可以?
  • 不,我不想为整个单元格着色。只有这个词,因为我有很长的文字。

标签: r shiny dt


【解决方案1】:

您可以为此使用tableHTML

library(tableHTML)

mtcars 数据集在整个答案中使用:

使用tableHTML() 函数创建一个tableHTML 对象。然后应用条件 css,如果列(在本例中为行名,即索引 0contains 特定单词。应用的 css 只是使用黄色突出显示背景:

mtcars %>% 
  tableHTML() %>% 
  add_css_conditional_column(columns = 0,
                             conditional = "contains",
                             value = "Toyota",
                             css = list(c("background-color"),
                                        c("yellow")))

结果是:

如果要匹配的单词很多,可以创建单词向量:

words <- c("Merc", "Fiat", "Honda")

创建基本的tableHTML 对象:

tableHTML <- mtcars %>% 
  tableHTML() 

并使用循环逐字应用 css:

for (word in words) {
  tableHTML <- tableHTML %>% 
    add_css_conditional_column(columns = 0,
                               conditional = "contains",
                               value = word,
                               css = list(c("background-color"),
                                          c("yellow")))
}

结果是:

如果您只想突出显示某个子字符串,您可以修改数据并在子字符串周围包含 span 并在那里应用 css。

library(magrittr) # for the %<>% pipe

rownames(mtcars) %<>% 
  stringr::str_replace_all(c('Merc' = '<span style="background-color:yellow">Merc</span>',
                  'Fiat' = '<span style="background-color:yellow">Fiat</span>',
                  'Honda' = '<span style="background-color:yellow">Honda</span>'))


mtcars %>% 
  tableHTML()

结果是:

【讨论】:

  • 谢谢,但我想知道 DT 表是否存在类似的解决方案。我必须将它合并到一个闪亮的应用程序中,而闪亮的 tableHTML 不支持。
  • 您可以使用带闪亮的 tableHTML,这是解释它的小插图:cran.r-project.org/web/packages/tableHTML/vignettes/…
  • 好的,感谢您分享文档。但它为整个单元格着色,我只想为这个词着色,否则它在我的上下文中没有意义。
  • 如果您愿意插入跨度是可能的。我已经用可能的解决方法更新了答案。
  • 嗨,已经有一段时间了,但我仍然无法弄清楚它如何在特定列上工作。我正在尝试 iris 数据集。这是一段代码:iris$Species %&lt;&gt;% stringr::str_replace_all(c('setosa' = '&lt;span style="background-color:yellow"&gt;setosa&lt;/span&gt;', 'virginica' = '&lt;span style="background-color:yellow"&gt;virginica&lt;/span&gt;')) iris %&gt;% tableHTML(),但这会将字符串替换为 span 命令
猜你喜欢
  • 1970-01-01
  • 2019-10-31
  • 2017-01-23
  • 2012-08-04
  • 2012-05-21
  • 2012-06-03
  • 2014-09-04
相关资源
最近更新 更多