通过Shiny中的行名列对数据表进行排序

时间:2019-01-25 10:31:15

标签: r shiny dt

iris数据帧的行名称为“ 1”,“ 2”,“ 3”,... 当我将第0列设置为DT可排序时,该排序的行为就好像行名是数字一样:

library(DT)
datatable(iris, 
          options = list(
            columnDefs = list(
              list(orderable=TRUE, targets=0)
            )
          )
) 

enter image description here

好。现在,当我在闪亮内部进行相同的操作时,其行为有所不同:排序的行为就像行名是字符串一样:

library(shiny)
shinyApp(
  ui = fluidPage(fluidRow(column(12, DTOutput('tbl')))),
  server = function(input, output) {
    output$tbl = renderDT(
      iris, options = list(
        columnDefs = list(
          list(orderable=TRUE, targets=0)
        )
      )
    )
  }
)

enter image description here

不好。造成差异的原因是什么?我想在Shiny中有第一个行为。作为一种解决方法,我们可以在第一位置设置一个数字列并设置rownames=FALSE,但是我想知道是否有一个更简单的解决方案,并且对此差异引起了我的兴趣。

编辑

我终于以这种方式进行了

output$tbl = renderDT({
  dt <- datatable(
    iris, options = list(
      columnDefs = list(
        list(orderable=TRUE, targets=0)
      )
    )
  )
  dt$x$data[[1]] <- as.numeric(dt$x$data[[1]]) 
  dt
})

1 个答案:

答案 0 :(得分:0)

SO告诉我我需要50名声望才能发表评论,所以这是我在答卷中的评论。

另一种解决方法是执行以下操作:

output$tbl = renderDT({
  dt <- datatable(
    iris %>%
       rownames_to_column("UID") %>%
       select(UID, everything()),
 options = list(
      columnDefs = list(
        list(orderable=TRUE, targets=0)
      )
    )
  )
  dt

它并没有回答您为什么会发生的问题。