导入 *.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"))
}
Print 显示 a/my 问题,循环只处理最后一个 csv 文件。因此我的数据只有三列,而不是 22 列。不幸的是我不知道如何解决这个问题。有人有想法吗?
提前致谢!
函数长度return一个数字。所以你的我在...
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"))
}
我需要导入几个 *.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"))
}
Print 显示 a/my 问题,循环只处理最后一个 csv 文件。因此我的数据只有三列,而不是 22 列。不幸的是我不知道如何解决这个问题。有人有想法吗?
提前致谢!
函数长度return一个数字。所以你的我在...
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"))
}