将多个文件读入多个数据框 [英] Reading multiple files into multiple data frames

查看:37
本文介绍了将多个文件读入多个数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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).我尝试了以下内容:

In d:folder, I have many Stata files, such as 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.... I want to convert those files and get as many data frames as the dta files in R. So, I believe I have to loop over c("aa", "bb", "cc") and c(1:3). I tried something like the following:

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

但是,这看起来不对——当然.

But, that looks wrong -- definitely.

任何帮助将不胜感激.

谢谢!

推荐答案

然而,无疑有更优雅的解决方案

There is undoubtedly a more elegant solution, however

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

Avoiding the for loop, and using @joran's suggestion of 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)})

这篇关于将多个文件读入多个数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆