2017-01-03 38 views
0

以前肯定有人问过这个问题,但是我一直没能找到适合我的代码。我正在R Shiny中使用DataTable。我想要生成DataTable,并在第二列而不是第一列按默认顺序排列。这是我在服务器.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不再显示任何行。

I拼凑这个例子来重现问题:。

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使一个很好的DataTable test2产生一个空白表

我试图移动order = list(2, 'asc')到代码的其他部分(如后选项,rownames前,管道后),但没有帮助。感谢赞赏!

回答

0

我不敢肯定这是你所追求的,但你可以尝试以下任一

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。

+0

有可能有一种方法来应用这些解决方案,但我尝试对它们进行格式化,以便它们与'datatable()'调用兼容。我被卡住使用该函数,因为我在Shiny的范围内工作,因此也在'renderDataTable({})'函数的范围内工作。 – Clare

+0

Clare的Q是关于'DT'封装的,它封装了JavaScript库'DataTables',而不是关于扩展data.frames的'data.table'包。不幸的是,名字看起来非常相似。 – Uwe