在保持身份的同时组合多个文件

时间:2014-09-01 02:28:58

标签: r csv merge

跟进上一个问题; consolidating data frames in R 使用lapply可以完美地读取和组合多个csv文件。

我的问题是,您还想根据您正在阅读的文件名为此合并数据集创建和附加标识符。

例如,如果您有2个数据集且它们是;

档案2014_1.csv;

Var1 Var2
21   140 
2    134 
3    135 

file 2014_2.csv;

Var1 Var2
21   131 
2    134 

我希望我的决赛桌看起来像这样;

Var1 Var2 Period
21   140  2014_1
2    134  2014_1
3    135  2014_1
21   131  2014_2
2    134  2014_2

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:2)

好吧,我已经弄明白了。 以下代码获取文件夹中的所有csv文件,将文件名作为id变量附加并组合它们。

files <- list.files()
files
# read the files into a list of data.frames
data.list <- lapply(files, function(.file){
     dat<-read.csv(.file, header = F)
   dat$period<-as.character(.file)
dat
})
# concatenate into one big data.frame
data.cat <- do.call(rbind, data.list)

答案 1 :(得分:2)

使用fread中的data.table(会更快)

 files <- list.files(pattern="\\d{4}_\\d.csv")
 library(data.table)
 library(tools)


  rbindlist(
     lapply(files, function(x) cbind(fread(x), Period=file_path_sans_ext(x)) ))
  #   Var1 Var2  Period
  #1:   21  140  2014_1
  #2:    2  134  2014_1
  #3:    3  135  2014_1
  #4:   21  131  2014_2
  #5:    2  134  2014_2

或者@Arun

的建议
 rbindlist(lapply(files, function(x) fread(x)[,Period:=file_path_sans_ext(x)]))

答案 2 :(得分:1)

基于您之前的帖子,我建议像这样

data.list <- cbind(lapply(files, read.csv), files)