我有一个包含500多个.dta文件的文件夹。我想将这些文件加载到一个R对象中。加载多个.dta文件
我的.dta文件的通用名称由四部分组成:'两个字母/四位数字/ y/.dta'。例如,名称可以是'de2015y.dta'或'fr2008y.dta'。只有对应于两个字母和四位数的部分在.dta文件中发生变化。
我写了一个代码,但我不满意它。我想避免使用循环并缩短它。
我的代码是:
# Select the .dta files I want to load
#.....................................
name <- list.files(path="E:/Folder") # names of the .dta files in the folder
db <- as.data.frame(name)
db$year <- substr(db$name, 3, 6)
db <- subset (db, year == max(db$year)) # keep last year available
db$country <- substr(db$name, 1, 2)
list.name <- as.list(db$country)
# Loading all the .dta files in the Global environment
#..................................................
for(i in c(list.name)){
obj_name <- paste(i, '2015y', sep='')
file_name <- file.path('E:/Folder',paste(obj_name,'dta', sep ='.'))
input <- read.dta13(file_name)
assign(obj_name, value = input)
}
# Merge the files into a single object
#..................................................
df2015 <- rbind (at2015y, be2015y, bg2015y, ch2015y, cy2015y, cz2015y, dk2015y, ee2015y, ee2015y, es2015y, fi2015y,
fr2015y, gr2015y, hr2015y, hu2015y, ie2015y, is2015y, it2015y, lt2015y, lu2015y, lv2015y, mt2015y,
nl2015y, no2015y, pl2015y, pl2015y, pt2015y, ro2015y, se2015y, si2015y, sk2015y, uk2015y)
有谁知道我怎么能避免使用一个循环,并缩短我的代码?
谢谢@Alias为你编码。它工作得很好。但是,您是否知道我如何在数据框中转换“文件”? –
@DavidMarguerit,如果你读入的文件包含向量或数据帧,那么你可以这样做:'mydataframe = data.frame(files)'。这个统一的数据框的列名将与原始列名相同,但是您将能够确定哪个列来自哪个文件,因为列名不仅包含原始列名,还包含名称它们来自的矢量/数据帧。因此,在统一数据框中,列名将具有以下结构:_origin-name.column-name_。这种自动命名需要命名列表组件。 – Alias