【发布时间】: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