如何读取可变数量的文件,然后组合R中的数据帧?

时间:2015-07-19 18:59:17

标签: r

我想设计一个功能。假设我有文件file1.csv,file2.csv,file3.csv,...,file100.csv。每次通过指定整数向量id调用函数时,我只想读取其中的一些,例如,id = 1:10,然后我将读取file1.csv,...,file10.csv。

在阅读了那些csv文件之后,我想将它们组合成一个变量。所有csv文件都具有相同的列结构。

我的代码如下:

  namelist <- list.files() 
  for (i in id) { 
    assign(paste0( "file", i ), read.csv(namelist[i], header=T))
  }

正如您所看到的,在我读完所有数据矩阵后,我坚持将它们组合在一起,因为它们都有不同的变量名称。

3 个答案:

答案 0 :(得分:6)

您应该将每个文件作为列表的元素读取。然后你可以按如下方式组合它们:

namelist <- list.files()
df <- vector("list", length = length(id))
for (i in id) {
    df[[i]] <- read.csv(namelist[i], header = TRUE)
}
df <- do.call("rbind", df)

或者更简洁:

df <- do.call(rbind, lapply(list.files(), read.csv))

答案 1 :(得分:3)

我这样做,没有for循环更像R:

## assuming you have a folder full of .csv's to merge
filenames <- list.files()

all_files <- Reduce(rbind, lapply(filenames, read.csv))

答案 2 :(得分:1)

如果我理解你想做什么,那么这就是你所需要的:

namelist <- list.files() 
singlevar = c()
for (i in id) { 
  singlevar = rbind(singlevar, read.csv(namelist[i], header=T))
}

最后,您希望一个对象包含单个文件中的所有部分信息,rbind