我有一个数据集:
ID Value
102 306
41 800
101 783
105 193
myID 334
Run Code Online (Sandbox Code Playgroud)
我想把它画成一个数据表,其中只有'myID'的行是橙色的,而其余的表是蓝色的.看过辅助函数和其他示例,似乎我应该使用styleEqual.但是,我不知道其他行中的值是什么,并且它们也会动态更改.
我试过用
datatable(tableData) %>%
formatStyle(0, target= 'row',color = 'black', backgroundColor = tableColour,
lineHeight='70%', padding = '3px 3px', fontSize = '80%') %>%
formatStyle('ID', target = 'row',
backgroundColor = styleEqual(c("myID"), c('orange')))
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用 - 整个表是蓝色的,第二个formatStyle语句被忽略.如果我删除第一个formatStyle,我的行会变成橙色,但会丢失所有其他格式.有没有办法使用styleEqual来定义eg c("myID", "All other IDs"),还是有另一种解决方法?
如果要使用DT,可以使用styleEqual()在条件满足时为表添加背景颜色.似乎没有else选项,因此您可以创建类的对象JS_EVAL(将由其返回styleEqual())并添加否定:
background <- "value == 'myID' ? 'orange' : value != 'else' ? 'blue' : ''"
class(background) <- "JS_EVAL"
datatable(tableData) %>% formatStyle(
'ID',
target = 'row',
backgroundColor = background
)
Run Code Online (Sandbox Code Playgroud)
结果如下:
您也可以使用包来实现它tableHTML:
library(tableHTML)
tableData %>%
tableHTML(rownames = FALSE,
widths = c(100, 100)) %>%
add_css_row(rows = which(tableData$ID == 'myID') + 1,
css = list(c("background-color"),
c("orange"))) %>%
add_css_row(rows = which(tableData$ID != 'myID') + 1,
css = list(c("background-color"),
c("blue")))
Run Code Online (Sandbox Code Playgroud)
结果如下:
我可以想到两种可能的解决方法:
myID或不等于,创建一个值为 1 或 0 的辅助列,然后使用该列设置表格样式并隐藏该列。ID,默认为某种颜色,并仅将对应的值设置为myID橙色。下面给出了第二个选项的工作示例。希望这可以帮助!

df = read.table(text='ID Value
102 306
41 800
101 783
105 193
myID 334',header=T)
library(DT)
my_vals = unique(df$ID)
my_colors = ifelse(my_vals=='myID','orange','grey')
datatable(df) %>%
formatStyle('ID', target = 'row',
backgroundColor = styleEqual(my_vals,my_colors))
Run Code Online (Sandbox Code Playgroud)