我有多个数据帧(即D1,D2,D3)。他们每个人都有不同的姓氏,我想对它们进行排序。但是我想创建一个功能。
例如,D1依次包含以下几列=草莓,苹果,香蕉
D2具有按此顺序排列的以下列= x2,x4,x3 等等 这是我要调整的内容:
Column_Sort = function(data) {
data = data[,sort(columnnames(data)]
return data}
有没有办法 1)创建一个函数将排序 2)能够一次对多个数据集进行排序并返回
我知道我可以一张一张地做,但是我有多个数据集,我想一次完成。
答案 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