如何在R

时间:2015-09-09 01:53:52

标签: r

我在R中有100个数据数据帧,并希望在使用rbind组合数据帧之前按列对每个数据进行排序。

我可以将data <- data[order(data$V2),]用于少量数据帧,但我无法使用循环(或其他有用的构造)自动化数百个数据帧的过程。

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

1 个答案:

答案 0 :(得分:3)

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

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

我们使用“V2”列({假设该列存在于所有数据集中)遍历list元素lapplyorder

 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)