R 使用函数对多个数据帧进行排序

R 使用函数对多个数据帧进行排序,r,function,sorting,dataframe,R,Function,Sorting,Dataframe,我有多个数据帧,即D1、D2、D3。它们每个都有不同的colname,我想对它们进行排序。但是我想创建一个函数 例如,D1按此顺序有以下列=草莓、苹果、香蕉 D2按此顺序具有以下列=x2、x4、x3 等 以下是我试图调整的内容: Column_Sort = function(data) { data = data[,sort(columnnames(data)] return data} 我有办法吗 1创建一个将排序的函数 2能够一次对多个数据集进行排序并返回 我知道我可以一个接一个地做,

我有多个数据帧,即D1、D2、D3。它们每个都有不同的colname,我想对它们进行排序。但是我想创建一个函数

例如,D1按此顺序有以下列=草莓、苹果、香蕉

D2按此顺序具有以下列=x2、x4、x3 等 以下是我试图调整的内容:

Column_Sort = function(data) {

data = data[,sort(columnnames(data)]

return data}
我有办法吗 1创建一个将排序的函数 2能够一次对多个数据集进行排序并返回


我知道我可以一个接一个地做,但我有多个数据集,我想一次做

如您所述,您有两个目标:1对1个数据帧进行排序,2对多个数据帧重复该操作。这是一个很好的分离,允许您先为1开发解决方案,然后为2开发解决方案

你的功能几乎到位了。要获取列名,请使用colnames。其次,R函数不需要返回语句,只需返回最后一个值。至少在tidyverse软件包中,这也是一个非常常见的样式指南。总之,您的功能变成:

sortdf <- function(data) {
  data[,sort(colnames(data))]
}
或者,您可以创建第二个函数来为您的应用程序执行此操作。无论哪种方式,您都必须决定您希望输出的方式,因为Lappy和函数都只能返回一个对象—我们都可以将任意数量的Ting绑定到一个list对象中。让我们把lappy包装成一个函数:

sorter <- function(...) {
  lapply(list(...), sortdf)
}

您可以创建一个函数,该函数接受要排序的数据和列名。您可以将所有数据帧放入一个列表中,并使用Lappy一次性将函数应用于所有数据帧。新建
sorter <- function(...) {
  lapply(list(...), sortdf)
}
sorter <- function(...) {
  m <- match.call()
  ret <- lapply(list(...), sortdf)
  if (is.null(names(ret))) {
    names(ret) <- make.names(m[-1])
  } else {
    names(ret)[names(ret) == ''] <- make.names(m[-1])[names(ret) == '']
  }
  ret
}

data("mtcars")
D1 <- mtcars[,c('cyl','drat','wt','am','qsec')]
sorter(D1, mtcars)
sorter(D1, b=data.frame(b='b',a='a'))