使用功能对多个数据框进行排序

时间:2019-01-24 07:24:27

标签: r function sorting dataframe

我有多个数据帧(即D1,D2,D3)。他们每个人都有不同的姓氏,我想对它们进行排序。但是我想创建一个功能。

例如,D1依次包含以下几列=草莓,苹果,香蕉

D2具有按此顺序排列的以下列= x2,x4,x3 等等 这是我要调整的内容:

Column_Sort = function(data) {

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

return data}

有没有办法 1)创建一个函数将排序 2)能够一次对多个数据集进行排序并返回

我知道我可以一张一张地做,但是我有多个数据集,我想一次完成。

1 个答案:

答案 0 :(得分:1)

陈述时,您有2个目标:1)对 1 数据帧进行排序,以及2)对多个数据帧重复该操作。这是一个很好的分离,它使您可以为1),然后为2)开发解决方案。

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

sortdf <- function(data) {
  data[,sort(colnames(data))]
}

对于2),您可以将所有数据帧捆绑到一个列表中,然后使用lapply:

lapply(list(D1, D2, D3), sortdf)

或者您可以创建第二个函数来为您执行此操作。无论哪种方式,您都必须决定要如何输出 ,因为lapply和一个函数只能返回一个对象-我们都可以将任意数量的tings捆绑到一个{{ 1}}对象。因此,让我们使用lapply并将其包装为一个函数:

list

在这里,我们使用省略号sorter <- function(...) { lapply(list(...), sortdf) } 作为用户可能希望在函数中引发的任意数量参数的替代。理想情况下,可以是任意数量的data.frame。要处理大小可变的变量集,我们将其打包到列表中。命令...会生成一个列表,其中包含与我们称为list(...)完全相同的参数。因此,继续检查sorter的输出。

唯一的问题是返回的列表未命名。你对哪个论点提出了什么?我在这里介绍一个扩展版本,该版本命名输出。检查一下,看看是否明白会发生什么。

sorter