导入* .csv并合并工作表

时间:2015-04-17 21:04:00

标签: r csv merge melt

我需要导入几个* .csv工作表,然后我必须将它们组合起来。我有一个Panel数据集,包含100个周期的季度数据,11个国家和20个变量。我把每个变量都作为额外的csv。我的目标是以第一列为国家的方式建立数据框,从日期开始,从第三列开始我的变量。

以下是* .csv的第一行:

Date,Austria,Belgium,Finland,France,Germany,Greece,Ireland,Italy,Netherlands,Portugal,Spain
Q1 1990,91.739,8.978,-12.598,28.071,37.638,94.159,34.13,13.214,24.101,40.43,2.556

Q2 1990,134.143,-2.89,-26.014,16.421,48.189,166.933,19.602,8.507,7.219,17.512,-19.39

Q3 1990,84.336,-3.891,-32.364,14.527,31.013,376.683,21.09,6.773,2.065,24.313,-7.234

到目前为止我做了什么?:

path = "~/R file/"  
filenames <- dir(path, pattern = '\\.csv', full.names = F)
data <- read.csv(filenames[1])
data <- melt(data, id.vars="Date", value.name=filenames[1], variable.name="Country",na.rm=F)
data <- data[,c(1,2)]
 for (i in length(filenames)){
   print(paste("opening file ", filenames[i],sep=""))
   dta <- read.csv(filenames[i])
   dta_long <- melt(dta, id.vars="Date", value.name=filenames[i], variable.name="Country",na.rm=F)
   data <- merge(data,dta_long,by = c("Country","Date"))
    }

打印显示我/我的问题,循环只处理最后一个csv文件。因此,我只有三列数据,而不是22.不幸的是我没有看到如何解决问题。有人有想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

函数长度返回一个数字。所以你的我... ...

for (i in length(filenames)){}

只能通过一个值 - 矢量文件名的长度。

解决方案可以与评论中一样......

for (i in 1:length(filenames)){}

或者更好的和更清楚的是迭代矢量的值......

for (file in filenames){
   print(paste("opening file ", file,sep=""))
   dta <- read.csv(file)
   dta_long <- melt(dta, id.vars="Date", value.name=file, variable.name="Country",na.rm=F)
   data <- merge(data,dta_long,by = c("Country","Date"))
}