2015-09-09 41 views
1

我在R中有100个数据数据帧,并希望在使用rbind合并数据帧之前按列排序它们中的每一个。如何在R中排序多个数据帧

我可以使用data <- data[order(data$V2),]来处理少量的数据帧,但我无法使用循环(或其他有用的构造)为数百个数据帧自动执行处理。

我打算使用x <- grep("data\\d",ls(),perl=TRUE,value=TRUE)do.call(rbind, lapply(x, get))来组合排序的数据帧。

回答

2

我们可以使用ls中的pattern参数返回对象名称,用mget包装它,它将得到list中对象的值。

lst <- mget(ls(pattern='data\\d')) 

通过与lapplyorderlist元素我们循环使用“V2”列(假设列在所有数据集中存在)

lst1 <- lapply(lst, function(x) x[order(x$V2),]) 

如果我们想改变原始数据对象(由于大多数操作都可以在list环境中完成,因此不推荐),我们可以使用list2env

list2env(lst1, envir=.GlobalEnv) 

,或者我们可以rbind所有数据集中

df1 <- do.call(rbind, lst1) 

这可能是更好的阅读在list所有的数据集,而不是直接创建单独的对象。假设,如果我们想读取工作目录中的所有文件,

files <- list.files() 
lst <- lapply(files, read.csv, stringsAsFactors=FALSE) 
+0

作品非常感谢你。只是一件事,对于这个例子,'list2env'选择应该是'list2env(lst1,envir = .GlobalEnv)'不''lst' –

+0

@AndrewBrown感谢您的反馈。纠正。 – akrun