2017-01-03 81 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