2016-02-26 63 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