我在R中有100个数据数据帧,并希望在使用rbind组合数据帧之前按列对每个数据进行排序。
我可以将data <- data[order(data$V2),]
用于少量数据帧,但我无法使用循环(或其他有用的构造)自动化数百个数据帧的过程。
我打算使用x <- grep("data\\d",ls(),perl=TRUE,value=TRUE)
和do.call(rbind, lapply(x, get))
来组合排序的数据框。
答案 0 :(得分:3)
我们可以使用pattern
中的ls
参数返回对象名称,用mget
包装它,它将获得list
中对象的值。
lst <- mget(ls(pattern='data\\d'))
我们使用“V2”列({假设该列存在于所有数据集中)遍历list
元素lapply
和order
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)