簡體   English   中英

將多個文件讀入多個數據幀

[英]Reading multiple files into multiple data frames

在d:\\文件夾中,我有很多Stata文件,例如data_aa_1.dta,data_aa_2.dta,data_aa_3.dta data_bb_1.dta,data_bb_2.dta,data_bb_3.dta,data_cc_1.dta ....我想轉換這些文件獲得與R中的dta文件一樣多的數據幀。所以,我相信我必須循環c(“aa”,“bb”,“cc”)和c(1:3)。 我嘗試過以下內容:

library(foreign)

for(i in c("aa","bb","cc"){
    for (j in 1:3){
        data_[i]_[j] <-read.dta("d:/folder/data_[i]_[j].dta")
    }
}

但是,這看起來不對 - 當然。

任何幫助將不勝感激。

謝謝!

嘗試這個,

fl = list.files(pattern = "dta", path = "d:/folder", 
                full.names = TRUE)
dl = lapply(fl, foreign::read.dta)
names(dl) = tools::file_path_sans_ext(fl)
str(dl)

然而,毫無疑問,這是一個更優雅的解決方案

library(foreign)



for(i in c("aa","bb","cc"){
    for (j in 1:3){
      obj_name <- paste('data', i, j, sep ='_')
      file_name <- file.path('d:/folder',paste(obj_name,'dta', sep ='.'))
      input <- read.dta(file_name)
      assign(obj_name, value = input)

    }
}

編輯

避免for循環,並使用@ joran的建議list.files

dta_files <- list.files('d:/folder', pattern = '.dta', full.names = T)

lapply(dta_files, function(fname){
  input <- read.dta(fname) 
  obj_name <- tools::file_path_sans_ext(basename(fname))
  assign(obj_name, value input, env = .GlobalEnv)})

暫無
暫無

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

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