如何使用自定义阈值按行自定义数据表
How to customize datatable by row with custom threshold
这与另一个问题有关 。
目前我正在使用这段代码来为我的table应用一些样式。
只有当值超过 row
的第 3 个分位数时,我才需要为每个单元格着色,问题是 DT
似乎不允许 row
工作, 仅 column
.
formattable()
工作正常,但我失去了 DT
的一些有用的属性,例如使用 editable=T
.
编辑单元格的可能性
library(formattable)
library(DT)
dat <- as.data.frame(matrix(AirPassengers, ncol=12, byrow=T))
find_anomaly <- function(x) {
q3 <- quantile(x, 0.75)
q3
}
ftable <- formattable(dat, lapply(1:nrow(dat), function(row) {
area(row, col = 1:12) ~ formatter("span", style = x ~ ifelse(x > find_anomaly(x),
style(
display = "block",
padding = "0 4px",
"border-radius" = "4px",
"color" = csscolor("white"),
"background-color" = csscolor(
gradient(as.numeric(x),"white", "orangered"))),
NA))
}))
as.datatable(ftable, editable=T)
在这里你可以看到一切都很好,除了table点击后显示formattable()
的HTML:
有没有办法让 formattable
生成的样式与 editable=T
一起正常工作?
这是一个 DT
的解决方案,将 render
选项应用于每一列:
library(DT)
products <- data.frame(
X1 = round(runif(5),2),
X2 = round(runif(5),2),
X3 = round(runif(5),2),
X4 = round(runif(5),2),
X5 = round(runif(5),2),
X6 = round(runif(5),2),
X7 = round(runif(5),2),
X8 = round(runif(5),2),
X9 = round(runif(5),2),
X10 = round(runif(5),2)
)
render <- c(
"function(data, type, row){",
" if(type === 'display'){",
" var arr = row.slice();",
" arr.sort();",
" var per75 = Math.floor(row.length*.75) - 1;",
" var s = data >= arr[per75] ? '<span style=\"padding: 0 4px; border-radius: 4px; background-color: red;\">' + data + '</span>' : data;",
" return s;",
" } else {",
" return data;",
" }",
"}"
)
datatable(products, editable = "cell", rownames = FALSE,
options = list(
columnDefs = list(
list(targets = "_all", render = JS(render))
)
)
)
这与另一个问题有关
目前我正在使用这段代码来为我的table应用一些样式。
只有当值超过 row
的第 3 个分位数时,我才需要为每个单元格着色,问题是 DT
似乎不允许 row
工作, 仅 column
.
formattable()
工作正常,但我失去了 DT
的一些有用的属性,例如使用 editable=T
.
library(formattable)
library(DT)
dat <- as.data.frame(matrix(AirPassengers, ncol=12, byrow=T))
find_anomaly <- function(x) {
q3 <- quantile(x, 0.75)
q3
}
ftable <- formattable(dat, lapply(1:nrow(dat), function(row) {
area(row, col = 1:12) ~ formatter("span", style = x ~ ifelse(x > find_anomaly(x),
style(
display = "block",
padding = "0 4px",
"border-radius" = "4px",
"color" = csscolor("white"),
"background-color" = csscolor(
gradient(as.numeric(x),"white", "orangered"))),
NA))
}))
as.datatable(ftable, editable=T)
在这里你可以看到一切都很好,除了table点击后显示formattable()
的HTML:
有没有办法让 formattable
生成的样式与 editable=T
一起正常工作?
这是一个 DT
的解决方案,将 render
选项应用于每一列:
library(DT)
products <- data.frame(
X1 = round(runif(5),2),
X2 = round(runif(5),2),
X3 = round(runif(5),2),
X4 = round(runif(5),2),
X5 = round(runif(5),2),
X6 = round(runif(5),2),
X7 = round(runif(5),2),
X8 = round(runif(5),2),
X9 = round(runif(5),2),
X10 = round(runif(5),2)
)
render <- c(
"function(data, type, row){",
" if(type === 'display'){",
" var arr = row.slice();",
" arr.sort();",
" var per75 = Math.floor(row.length*.75) - 1;",
" var s = data >= arr[per75] ? '<span style=\"padding: 0 4px; border-radius: 4px; background-color: red;\">' + data + '</span>' : data;",
" return s;",
" } else {",
" return data;",
" }",
"}"
)
datatable(products, editable = "cell", rownames = FALSE,
options = list(
columnDefs = list(
list(targets = "_all", render = JS(render))
)
)
)