我有一个通过搜索工作目录找到的文件名列表。我想要制作一个具有多个可从中选择的元素的数据帧或多个数据帧。要选择一个数据框的任一部分或从多个数据框中选择,我想使用相关文件名的一部分来命名它们。
目前,我使用filenames
设置list.files
并使用lapply
read.csv
设置数据框
filenames = list.files(recursive=TRUE,pattern="*dat.csv",full.names=FALSE)
data = lapply(filenames,function(i){
read.csv(i,stringsAsFactors=FALSE)
})
有人可以向我解释一下这个数据导入和名称分配的最佳方法吗?
答案 0 :(得分:1)
存储它的一个好方法是作为一个单独的组合数据框,其中一列描述原始文件,假设get()
:
public T get() {
// double-check idiom from EJ2: Item 71
Object result = instance;
if (result == UNINITIALIZED) {
synchronized (this) {
result = instance;
if (result == UNINITIALIZED) {
instance = result = factory.get();
}
}
}
return (T) result;
}
或更短,与plyr:
type
通过这种方式,您可以提取所需的任何子集:
data_frames = lapply(filenames,function(i){
ret <- read.csv(i,stringsAsFactors=FALSE)
ret$type <- gsub("dat.csv$", "", i)
ret
})
data = do.call(rbind, data_frames)
您可以将每个数据集存储为具有library(plyr)
data = ldply(filenames, read.csv, stringsAsFactors = FALSE, .id = "type")
data$type <- gsub("dat.csv$", "", data$type)
名称的单个变量,但您不应该,因为it's a bad idea to use your variable names to store information。
(请注意,这假设您的数据集共享大多数或至少一些列。如果它们具有完全不同的结构,则这不是一种合适的方法。)