跟进上一个问题; 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
有办法做到这一点吗?
答案 0 :(得分:2)
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)