R语言 用abs对应用程序的列数据表进行排序

6l7fqoea  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(143)

希望有人能在一个Shiny应用程序的datatable()函数中帮助按绝对值对列进行排序吗?尝试了多种方法(dplyr、arrange等),但由于某种原因,我对它不感兴趣。这是一个三列的datatable,试图按绝对值对列2/val 2进行排序。

table_stage <- reactive ({
    tbl <- datatable(tabledat(),
                     rownames = FALSE,
                     options = list(
                       columnDefs = list(list(className = "dt-center", targets = 2)),
                       order = list(list(2, "asc"))
                     )) %>%
      formatRound("val", 2) %>%
      formatRound("val2", 2)
    
    return(tbl)
  })

这绝对是错的,根本没有起作用。

table_stage <- reactive ({
    tbl <- datatable(tabledat(),
                     rownames = FALSE,
                     options = list(
                       columnDefs = list(list(className = "dt-center", targets = 2)),
                       order = list(list((arrange(abs(2)), "desc"))
                     )) %>%
      formatRound("val", 2) %>%
      formatRound("val2", 2)
    
    return(tbl)
  })
wko9yo5t

wko9yo5t1#

当在UI上下文中使用dataTableOutput并在Server函数中使用renderDataTable时,代码运行没有问题。
此脚本适用于order by mpg(示例表中的第一列),如果mtcars是数据框,则此脚本也适用。

library(data.table)
library(shiny)
library(dplyr)
library(DT)

if (interactive()) {
  
  ui <- fluidPage(
    dataTableOutput("table")
  )
  
  #optional test data
  tabledat <- data.table::as.data.table(mtcars)
    
  server <- function(input, output) {
    output$table <- 
      renderDataTable({
        tabledat %>% 
          datatable(
            rownames = FALSE,
            options = list(
              columnDefs = list(list(className = "dt-center", targets = 2)),
              order = list(list(1, "asc"))
            )
          )
      },
      )
    
  }
  shinyApp(ui, server)
}
wnrlj8wa

wnrlj8wa2#

您需要使用render选项:

library(DT)

js <- "
function(data, type, row, meta) {
  if(type === 'sort') {
    data = Math.abs(data);
  }
  return data;
}
"

mydata <- as.data.frame(
  matrix(runif(40, -10000, 10000), nrow = 10, ncol = 4)
)

datatable(
  mydata,
  options = list(
    "columnDefs" = list(
      list(
        "targets" = 1,
        "render"  = JS(js)
      )
    )
  )
)

相关问题