R:根据导入的文件名

时间:2015-05-20 21:17:39

标签: r

我有一个通过搜索工作目录找到的文件名列表。我想要制作一个具有多个可从中选择的元素的数据帧或多个数据帧。要选择一个数据框的任一部分或从多个数据框中选择,我想使用相关文件名的一部分来命名它们。

目前,我使用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)
})

有人可以向我解释一下这个数据导入和名称分配的最佳方法吗?

1 个答案:

答案 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

(请注意,这假设您的数据集共享大多数或至少一些列。如果它们具有完全不同的结构,则这不是一种合适的方法。)