2016-02-26 23 views
2

我想要以5%的增量顯示數據,例如5-10%,10-15%等。爲此,我有一個數據框來存儲它們作爲一個因素,水平是該範圍的中點,標籤是要顯示的範圍。例如,12.5級將被標記爲10-15%。使用DT包的數據表中的訂購因子

但是,我遇到了麻煩使用數據表正確排序。

library('DT') 
example <- data.frame(name = c('A', 'B', 'C', 'D'), 
        value = factor(c(7.5, 12.5, 7.5, 17.5), 
            levels = c(7.5, 12.5, 17.5), 
            labels = c('5-10%', '10-15%', '15-20%'))) 

datatable(example, 
     rownames = FALSE, 
     options = list(order = list(1, 'asc'))) 

enter image description here

正如你所看到的,這似乎是整理過的字符串的第一個數字的,而不是由因子的水平排序。

關於如何讓數據表排除因子水平而不是字符串的任何想法? (除了在將數據幀傳遞到數據表之前對其進行排序 - 我希望通過單擊排序箭頭可以在任何方向上正確排序)

+0

您可以考慮對您的值使用「cut」函數。這會爲您生成一個正確排序的因子。 – Heroka

+1

您可以使用'labels = c('5-10%','10 -15%','15 -20%')'而不是 – rawr

+0

NicE和rawr的解決方案都適用於我的特定數據。謝謝您的幫助! – Sam

回答

3

您可以使用帶有數字值的隱藏列,根據該隱藏列對因素進行排序:

library('DT') 
value <- factor(c(7.5, 12.5, 7.5, 17.5), 
       levels = c(7.5, 12.5, 17.5), 
       labels = c('5-10%', '10-15%', '15-20%')) 

example <- data.frame(name = c('A', 'B', 'C', 'D'), 
         value = value, 
         levels=as.numeric(value)) 

datatable(example, 
      rownames = FALSE, 
      options = list(columnDefs=list(list(orderData=2,targets=1), 
             list(visible=FALSE,targets=2)))) 
+2

非常偷偷摸摸,尼克知道 – rawr