[英]New conditional row in DT with rowCallback in R shiny
满足某些条件后,我想在DT中引入新的一行。 它仅用于演示目的。
例如,如果第一行某行的值是“一般风险”,则之前仅引入一列的新行将被引入。 新列的值将为“ RISKS”。 我有以下rowCallback:
rowCallback = I(
'function(row, data) {
if (data[1] == "General risk")
$("tr", row).prepend("<tr><td>RISKS</td></tr>");
}'
)
行$("tr", row).prepend("<tr><td>RISKS</td></tr>");
不起作用,我也不知道如何解决。
提前致谢。
根据官方的文档和本主题存在没有API方法datatables
( DT
用于在特定的indeces添加行包中的R)。
您可以通过JavaScript中的rowCallback
解决此问题,但我建议在R中创建一个临时data.frame
(可以是响应式的,这取决于您的用例)。
library(magrittr)
library(DT)
library(shiny)
library(dplyr)
# Create df for reproducible example
df <- data.frame(
test = c("General risk", "Category2", "Category3"),
some_value = runif(12)
)
ui <- fluidPage(
DT::dataTableOutput("dt")
)
server <- function(input, output, session) {
output$dt <- DT::renderDataTable( {
# Create temporary data.frame
df_shown <- df
# Row indeces to add
row_indeces <- which(df$test == "General risk")
# Add rows in decreasing order
for (i in sort(row_indeces, decreasing = TRUE)) {
df_shown <- dplyr::add_row(df_shown, test = "Risk", some_value = NA_real_, .before = i)
}
datatable(
data = df_shown,
# Change bg color to stand out more
options = list(
rowCallback = JS("
function( row, data, index ) {
if (data[1] === 'Risk') {
$(row).css('background-color', 'Crimson');
}
}"
)
)
)
})
}
shinyApp(ui, server)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.