我有一個包含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