【问题标题】:Reading multiple files into multiple data frames将多个文件读入多个数据帧
【发布时间】:2012-06-28 10:19:08
【问题描述】:

在d:\folder,我有很多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")
    }
}

但是,这看起来不对——绝对是。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: r for-loop stata


    【解决方案1】:

    不过,无疑还有更优雅的解决方案

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

    【讨论】:

    • 您也可以将 OP 指向像 list.files 这样的函数。
    【解决方案2】:

    试试这个,

    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)
    

    【讨论】:

    • 我认为这是最直接的。
    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2017-06-23
    • 2011-07-16
    • 2017-04-29
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多