Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于作为输入传入的多个列的顺序_R_Sorting_Dataframe - Fatal编程技术网

R 基于作为输入传入的多个列的顺序

R 基于作为输入传入的多个列的顺序,r,sorting,dataframe,R,Sorting,Dataframe,我想编写一个函数,通过任意数量的列对给定的data.frame(我将称为dataSet)进行排序,这些列的名称也会传递到函数中(在我将称为orderList的向量中)。我知道,通过单个传入字符串进行排序,您只需使用 sortDataset <- function(dataSet, sortCol) { return(dataSet[order(dataSet[[sortCol]]),]) } 在前两个例子中遇到了一些问题,因为它们不是获取多个列的有效方法(尽管我仍在尝试):,而在第三个例

我想编写一个函数,通过任意数量的列对给定的data.frame(我将称为dataSet)进行排序,这些列的名称也会传递到函数中(在我将称为orderList的向量中)。我知道,通过单个传入字符串进行排序,您只需使用

sortDataset <- function(dataSet, sortCol) {
return(dataSet[order(dataSet[[sortCol]]),])
}
在前两个例子中遇到了一些问题,因为它们不是获取多个列的有效方法(尽管我仍在尝试):,而在第三个例子中,order似乎不接受dataSet[,orderList]返回的矩阵作为参数

我想要一个如下的函数:

sortDataset <- function(dataSet, sortCols)

sortDataset使用
do.call

data[do.call("order", data[sortCols]), ]
其中,
data
是数据框,
sortCols
是列名的字符向量


还可以查看doBy软件包中的
orderBy

我们可以使用
tidyverse

library(dplyr)
data %>%
     arrange_at(vars(sortCols))

可以使用
quos/1

sortDataset <- function(dataSet, ...) {
   stopifnot(rlang::is_quosures(...))
   a1 <- c(...)

  dataSet %>%
      arrange(!!!  a1)
 }
sortDataset(mtcars, quos(mpg, cyl))

正如@Nettle在评论中提到的,使用
arrange_at
group_by
可能会导致一些错误(基于听起来像
数据。table::setorderv
函数请记住
arrange_at
应用于分组变量时可能会有错误。
library(dplyr)
data %>%
     arrange_at(vars(sortCols))
sortDataset <- function(dataSet, ...) {
   stopifnot(rlang::is_quosures(...))
   a1 <- c(...)

  dataSet %>%
      arrange(!!!  a1)
 }
sortDataset(mtcars, quos(mpg, cyl))
sortDataset <- function(dataSet, ...) {

 a1 <- c(...)
dataSet %>%
    arrange_at(vars(a1))
}

sortDataset(mtcars, "mpg", "cyl")