在 R base order() 中自动选择列
Automate column choice in R base order()
我正在用 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 base 的方法。
PS 最终,我按照建议 here 成功使用了 fn$sqldf,写成:
groupBY_str <- paste(groupBY,collapse=',')
mtcars_ordered_sql <- fn$sqldf('select * from mtcars order by $groupBY_str').
尽管如此,我很好奇如何用 base R 解决它。
我们可以使用do.call
mtcars_ordered_auto <- mtcars[do.call(order, mtcars[groupBY]),]
-检查 OP 的输出
identical(mtcars_ordered, mtcars_ordered_auto)
#[1] TRUE
我正在用 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 base 的方法。
PS 最终,我按照建议 here 成功使用了 fn$sqldf,写成:
groupBY_str <- paste(groupBY,collapse=',')
mtcars_ordered_sql <- fn$sqldf('select * from mtcars order by $groupBY_str').
尽管如此,我很好奇如何用 base R 解决它。
我们可以使用do.call
mtcars_ordered_auto <- mtcars[do.call(order, mtcars[groupBY]),]
-检查 OP 的输出
identical(mtcars_ordered, mtcars_ordered_auto)
#[1] TRUE