[英]How to filter (search) formatted columns in R DT (DataTable)
將格式應用於DT::datatable()
中的列時,DataTables 自動列過濾器不起作用。 例如:
library(DT)
a <- letters[1:10]
b <- 1:10
df <- data.frame(a, b)
datatable(df, filter="bottom") %>% formatCurrency(columns = "b", currency = "$")
b
列的過濾器失敗。
我認為這是一個足夠普遍的問題,必須有一個解決方案。 我一直在尋找,但到目前為止沒有成功。 如果有人指出我解決了這個問題,將不勝感激。
I am aware that by using the JS
callback function on the DT website ( https://rstudio.github.io/DT/options.html see 4.5 Row rendering and run it with filter="top"
), one can filter with formatted列。 但我正在嘗試為R
package 實施通用解決方案,所以我希望有一個R
解決方案。
我有一種在某些情況下有效的方法。 方法是將原始數字列復制到渲染時隱藏的新列。 但是將格式化數字( column
)“鏈接”到formatStyle
中的原始數字列( values_column
)。 然后,幸運的是,並不完全確定為什么,在格式化的列上進行搜索是有效的。 但僅適用於后綴(如%
),但不適用於前綴( $
)或帶有逗號的大數字格式。
每種情況的代碼如下。
我不介意使用此解決方法,但對 DT 的內部工作原理了解不足,無法使前綴和其他格式正常工作。
library(DT)
a <- letters[1:10]
b <- 1:10
df <- data.frame(a, b)
xx <-
datatable(
data = df,
filter = "bottom",
options = list(columnDefs = list(list(
targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE
)))
)
xx$x$data$hide_b <- xx$x$data$b
xx$x$data$b <- paste(xx$x$data$b, "%")
attr(xx$x, "colnames") <- colnames(xx$x$data)
xx %>%
formatStyle(
columns = "b",
valueColumns = "hide_b"
)
library(DT)
a <- letters[1:10]
b <- 1:10
df <- data.frame(a, b)
xx <-
datatable(
data = df,
filter = "bottom",
options = list(columnDefs = list(list(
targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE
)))
)
xx$x$data$hide_b <- xx$x$data$b
xx$x$data$b <- paste("$", xx$x$data$b)
attr(xx$x, "colnames") <- colnames(xx$x$data)
xx %>%
formatStyle(
columns = "b",
valueColumns = "hide_b"
)
library(DT)
a <- letters[1:10]
b <- 1:10*10^6
df <- data.frame(a, b)
xx <-
datatable(
data = df,
filter = "bottom",
options = list(columnDefs = list(list(
targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE
)))
)
xx$x$data$hide_b <- xx$x$data$b
xx$x$data$b <- format(xx$x$data$b,digits = 1, scientific = FALSE, big.mark = ",")
attr(xx$x, "colnames") <- colnames(xx$x$data)
xx %>%
formatStyle(
columns = "b",
valueColumns = "hide_b"
)
已在 DT 的最新開發版本中修復。 格式化不再破壞過濾。
在 Shiny 應用程序中使用帶有server=TRUE
(默認值)的DR::renderDT
可以使用常規DT::format*
函數解決此問題。 在Shiny
上下文之外,這些示例仍然不起作用。 但這在我的情況下無關緊要,因為表格將在 Shiny 應用程序中使用 go。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.