我有一个数据集:
ID Value
102 306
41 800
101 783
105 193
myID 334
我想把它画成一个数据表,其中只有带有' myID'的行。是橙色的,桌子的其余部分是蓝色的。看过helper functions和other examples后,似乎我应该使用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')))
但是,这不起作用 - 整个表是蓝色的,第二个formatStyle
语句被忽略。如果我删除第一个formatStyle,我的行会变成橙色,但会丢失所有其他格式。有没有办法使用styleEqual来定义例如c("myID", "All other IDs")
,还是有另一种解决方法?
答案 0 :(得分:6)
如果您想使用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
)
结果如下:
您也可以使用包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")))
结果如下:
答案 1 :(得分:0)
我可以想到两种可能的解决方法:
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))