【问题标题】:Automate column choice in R base order()在 R 基本顺序中自动选择列()
【发布时间】:2020-08-10 08:26:49
【问题描述】:

我正在 R 中处理一个自动化项目。我想按行值对输入数据集(即数据框)进行排序。 不允许使用硬编码值,因为它是自动代码。下面的可重现示例:

data("mtcars")
groupBY <- c('cyl','carb')

通常,我会继续订购:

mtcars_ordered <- mtcars[order(mtcars$cyl,mtcars$carb),]

或者这个:

mtcars_ordered <- mtcars[with(mtcars,order(cyl,carb)),]

但我在'自动化世界',没有硬编码值。因此,我正在寻找这样的东西:

mtcars_ordered_auto <- mtcars[with(mtcars,order(groupBY)),]

order() 接受向量,即数据框的子集,但我找不到仅使用 R 基础的方法。

PS 最终,我按照here 的建议成功使用了 fn$sqldf,方法是:

groupBY_str <- paste(groupBY,collapse=',')
mtcars_ordered_sql <- fn$sqldf('select * from mtcars order by $groupBY_str').

不过,我很好奇如何用 base R 解决它。

【问题讨论】:

  • 关于fn$sqldf 问题中的最后一行代码请注意,$ 后面的名称中不能有下划线。它们将被视为终止名称,而不是名称的一部分。您可以在这样的名称周围加上引号,或者使用没有特殊字符的其他名称。
  • 我必须承认,我在浏览器中编辑了我的问题,没有在 R 中重新运行它 - 我无法看到这个 Error: near "_str": syntax error。谢谢!

标签: r automation sqldf


【解决方案1】:

我们可以使用do.call

mtcars_ordered_auto <- mtcars[do.call(order, mtcars[groupBY]),]

-检查 OP 的输出

identical(mtcars_ordered, mtcars_ordered_auto)
#[1] TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多