【问题标题】:Ordering rows with datatables使用数据表对行进行排序
【发布时间】:2017-05-18 02:56:47
【问题描述】:

之前肯定有人问过这个问题,但我无法找到任何适合我的代码。我正在使用 R Shiny 中的 DataTable。我想生成 DataTable 并默认将其排序在第二列而不是第一列。这就是我在 server.R 中的内容:

output$TabVals <- DT::renderDataTable({
  DT::datatable(TableData(), 
              options = list(pageLength = 25, 
                             searching = FALSE, 
                             paging = FALSE),   
              rownames = FALSE) %>%
      formatRound(2, digits = 0)
})

这很好用。我发现其他人所做的是包含在选项order = list(2, 'asc') 中(因为我正在对第二列进行排序并希望数据升序。但是,当我添加该行时,DataTable 不再显示任何行。

我把这个例子放在一起来重现这个问题:

c1 <- c("a", "b", "c")
c2 <- c(1, 2, 3)
test <- cbind(c1, c2)

test1 <-  DT::datatable(test)
test2 <-  DT::datatable(test, options = list(order = list(2, 'desc')))

test1 制作了一个不错的数据表。 test2 生成一个空白表。

我尝试将order = list(2, 'asc') 移动到代码的其他部分(例如,在选项之后、行名之前、管道之后),但这并没有帮助。想法表示赞赏!

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    DT 基于 javascript,因此索引从 0 而不是 1 开始。 这就是为什么您的表格是空白的,您想要对不存在的列进行排序。

    所以这应该有效:

    c1 <- c("a", "b", "c")
    c2 <- c(1, 2, 3)
    test <- cbind(c1, c2)
    
    test1 <-  DT::datatable(test)
    test2 <-  DT::datatable(test, options = list(order = list(1, 'desc')))
    

    【讨论】:

      【解决方案2】:

      我完全不确定这是您想要的,但您可以尝试以下任一方法

      library(data.table). 
      c1 <- c("a", "b", "c")
      c2 <- c(1, 2, 3)
      test <- data.table(c1,c2)
      setkey(test,c2)
      test
      # or
      test[, some function in j, by = c2]
      

      希望对您有所帮助。我有一种预感,你知道的 R 比我多。

      【讨论】:

      • 可能有一种方法可以应用这些解决方案,但我尝试对它们进行格式化以使其与datatable() 调用兼容,但失败了。我一直在使用该函数,因为我在 Shiny 的范围内工作,因此也在 renderDataTable({}) 函数的范围内工作。
      • Clare 的 Q 是关于包装 JavaScript 库 DataTablesDT 包,而不是关于扩展 data.frames 的 data.table 包。不幸的是,名字看起来非常相似。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      相关资源
      最近更新 更多