此查询是此论坛中我之前query的扩展程序。但是,这次我必须处理一行中的一系列字符,每个字符都在一个单元格中,如下图所示。我想基于如下模式突出显示或更改某些单元格的背景:
答案 0 :(得分:3)
我在这里拉我的包,所以这可能不适合你,因为它只使用HTML表而不是DT,并且在R方面工作而不是在javascript中。
find_pattern <- function (pat, mat) {
# collapse the row into a single string:
strings <- apply(mat, 1, paste0, collapse = '')
# find the patterns you want:
found <- gregexpr(pat, strings, perl = TRUE)
# the rest is just housekeeping:
pos <- matrix(FALSE, nrow(mat), ncol(mat))
lapply(seq_along(found), function (x) {
matches <- found[[x]]
lens <- attr(matches, 'match.length')
if (all(matches == -1)) return()
for (p in seq_along(matches)) {
start <- matches[p]
len <- lens[p]
end <- start + len - 1
pos[x, start:end] <<- TRUE
}
})
which(pos, arr.ind = TRUE)
}
library(huxtable)
mydata <- matrix(sample(c('A', 'B', 'C', 'M', 'N', 'F'), 750, replace=TRUE), 3, 250)
colnames(mydata) <- paste0('X', 1:250)
myhux <- as_hux(mydata, add_colnames = TRUE)
myhux <- set_all_borders(myhux, 1)
background_color(myhux)[1,] <- 'grey'
background_color(myhux)[myhux == 'M'] <- 'green'
background_color(myhux)[find_pattern('A.C', myhux)] <- 'yellow'
background_color(myhux)[find_pattern('NF', myhux)] <- 'blue'
myhux
结果是:
find_pattern
函数将接受您抛出的任何perl正则表达式。 A.C
表示A,后跟任何字母,后跟C。