簡體   English   中英

導入* .csv並合並工作表

[英]import *.csv and merge the sheets

我需要導入幾個* .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列。不幸的是,我看不到如何解決問題。 有人有主意嗎?

提前致謝!

函數長度返回一個數字。 所以你我在...

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"))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM