使用DT包对数据表进行排序因素的排序

5
我有一些数据需要以5%的增量进行显示,例如5-10%,10-15%等。 为此,我有一个数据框架将它们存储为因子,水平是范围的中点,标签是要显示的范围。例如,级别12.5将标记为10-15%。
然而,我在使用datatable时无法正确排序。
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')))

输入图像描述

如您所见,它似乎是按照字符串的第一个数字进行排序,而不是按照因子的级别进行排序。

有没有想法可以让数据表格根据因子级别而不是字符串进行排序?(除了在将其传递到数据表格之前对数据框进行排序 - 我希望通过点击排序箭头可以正确地进行双向排序)


你可以考虑在你的值上使用 cut 函数。这将为您生成一个正确排序的因子。 - Heroka
1
你可以使用 labels = c(' 5-10%', '10-15%', '15-20%') - rawr
NicE和rawr的解决方案都适用于我的特定数据。感谢你们的帮助! - Sam
我不理解@rawr的评论。那行代码已经在OP的问题中了。 - Giovanni Colitti
@GiovanniColitti 额外的空格 - rawr
这篇文章讨论了解决这个问题的另外两种可能的方法。 - Giovanni Colitti
1个回答

6

您可以使用一个带有因子数值的隐藏列,并根据该隐藏列对因子进行排序:

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))))

3
非常狡猾,很高兴知道。 - rawr
这对我也很有效,但我发现排序列也很有帮助:options = list(columnDefs=list(list(visible=FALSE,targets=2)), order = list(list(2, 'asc'))). - al-obrien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接