在R中传递具有多个变量名的对象,以对数据帧进行排序/排序

时间:2015-01-05 18:50:06

标签: r sorting dplyr

我有一个数据框说:

var1 <- c(7,2,8,4,4)

var2 <- c('m' , 'f' , 'm' , 'f' , 'm')

var3 <- c('x' , 'x' , 'x' , 'y' , 'x')

df <- data.frame(var1 , var1 , var3)

现在我想对var2,var3,var1上的数据进行排序,并且我有一个对象:

var_sort <- 'var2, var3, var1'

我从另一个数据框中提取的内容。

所以我使用以下代码(dplyr):

sorted <- df %>%
            arrange(var_sort)

并收到以下错误:

Error: incorrect size (1), expecting :1439

我也尝试了以下内容,但只对第一个变量进行了排序:

test <- as.vector(strsplit(var_sort , ', '))

sorted <- df %>%
  arrange_(.dots = test) 

1 个答案:

答案 0 :(得分:4)

“test”仍然是list长度1。您需要将其转换为vector或使用as.list

 df %>%
     arrange_(.dots=as.list(test[[1]]))
 #    var1 var2 var3
 #1    2    f    x
 #2    4    f    y
 #3    4    m    x
 #4    7    m    x
 #5    8    m    x

或者

df %>%
   arrange_(.dots=test[[1]])

相同
df %>%
    arrange(var1, var2, var3)
#   var1 var2 var3
#1    2    f    x
#2    4    f    y
#3    4    m    x
#4    7    m    x
#5    8    m    x

数据

df <- data.frame(var1, var2, var3)