【问题标题】:Order data.table by a character vector of column names按列名的字符向量对 data.table 进行排序
【发布时间】:2015-02-08 14:00:46
【问题描述】:

我想通过一个包含列名的变量来订购data.table

我已经尝试了 + eval, getandc` 的所有组合,但没有成功:

我有colVar = "someColumnName"

我想将此应用于:DT[order(colVar)]

【问题讨论】:

    标签: r sorting variables data.table


    【解决方案1】:

    数据表可以使用双括号:

    library(data.table)
    dtbl <- data.table(x = 1:5, y = 5:1)
    colVar = "y"
    dtbl_sorted <- dtbl[order(dtbl[[colVar]])]
    dtbl_sorted
    

    【讨论】:

      【解决方案2】:

      data.table 具有特殊功能,可以通过引用修改您的数据集,而不是将其复制到新对象。

      您可以使用 setkey 或(在 >= 1.9.4 版本中)setorder,它们也可以降序排列。

      注意setkeysetkeyvsetordersetorderv 之间的区别。 v 指出,您可以传递带引号的变量名称或包含变量名称的变量。

      使用@andrewzm 数据集

      dtbl
      #    x y
      # 1: 1 5
      # 2: 2 4
      # 3: 3 3
      # 4: 4 2
      # 5: 5 1
      
      setorderv(dtbl, colVar)[] # or `sekeyv(dtbl, colVar)[]` or `setorderv(dtbl, "y")[]`
      #    x y
      # 1: 5 1
      # 2: 4 2
      # 3: 3 3
      # 4: 2 4
      # 5: 1 5
      

      【讨论】:

      • @hibernado 随意接受这个(更高级,但最终更简单)的答案
      • @hibernado 这很有趣。您能否澄清一下为什么这不能回答您的问题?
      • 我特别想将它应用到 DT[order(colVar)]。我发现 SO 不断用新方法回答问题非常令人沮丧。 setkeyv 速度很快,但不适合我的任务,因为我将 order 与另一个函数一起使用。我可以完全重做它来拆分这两个功能,但这不太清楚。现在,清晰度比速度更重要。
      • 我建议setorderv 而不是setkeyv,但你没有必须接受任何东西,这是你的选择。不,我不需要积分,谢谢你,祝你有美好的一天。
      猜你喜欢
      • 1970-01-01
      • 2020-10-21
      • 2014-04-15
      • 2018-09-15
      • 2014-06-02
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      相关资源
      最近更新 更多