如何按可变列数对数据框排序?

时间:2018-10-03 07:46:19

标签: r sorting dataframe

我想按可变的列数对数据框进行排序。例如,对于下面的数据框,我想按“ x”列然后按“ y”列进行排序:

df <- data.frame(x = c("A", "D", "A", "C", "D"), y = c(8, 3, 9, 9, 8),
      z = c(1, 1, 1, 2, 1))

我不能指定以下列:

library(dplyr)
arrange(df,x,y)

因为我的代码必须能够按可变的列数对数据帧进行排序(对于此数据帧:1、2或3列)。

我尝试了以下操作:

columnsOrder = c("x","y")
arrange(df,columnsOrder)

但这不起作用。

1 个答案:

答案 0 :(得分:1)

如果您要“到达”实列,则可以使用函数arrange_(现已弃用...)代替arrange,并使用参数.dots进行传递您的变量名向量:

arrange_(df, .dots=columnsOrder)
#  x y z
#1 A 8 1
#2 A 9 1
#3 C 9 2
#4 D 3 1
#5 D 8 1

或者您可以使用rlang::symsquasiquotation来从字符串向量创建名称:

df %>% arrange(!!! rlang::syms(columnsOrder))