在cs中转换dta文件

2024-06-01 02:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把几个dta文件转换成csv。 到目前为止,我的代码是(老实说,我使用了stackoverflow上找到的答案…)

^{1}$

它可以工作,但如果我的文件夹包含子文件夹,它们将被忽略。 我的问题是我有11个子文件夹(其中可能包含子文件夹本身),我想找到一种方法来循环我的文件夹和子文件夹,因为现在我需要更改我的工作目录为每个子文件夹和。在

我现在用的是R,我试着用pandas(python),但似乎转换的质量值得商榷。。。在

谢谢你


Tags: 文件csv方法答案代码目录文件夹pandas
2条回答

在R中,只需在list.files中设置recursive = T。在

实际上,在处理目录时指定递归是一种通用方法,它可以在操作系统(包括Linux和Windows)中使用rm -rf等命令进行命令行操作,并适用于R中的多个函数

这篇文章有一个很好的例子:

How to use R to Iterate through Subfolders and bind CSV files of the same ID?

他们的示例(不同之处在于他们对目录/子目录搜索的结果所做的操作)是:

 lapply(c('1234' ,'1345','1456','1560'),function(x){
     sources.files  <- list.files(path=TF,
                                recursive=T,
                                pattern=paste('*09061*',x,'*.csv',sep='')
                                ,full.names=T)
      ## You read all files with the id and bind them
      dat <- do.call(rbind,lapply(sources.files,read.csv))
      ### write the file for the 
      write(dat,paste('agg',x,'.csv',sep='')
   }

因此,对于您pattern = '.dta',只需将基本目录设置在path中。在

考虑使用baser的list.files()作为递归参数指定在子目录中搜索。您还需要全名设置为返回文件引用的绝对路径。在

因此,将模式设置为查找.dta扩展(即Stata数据集),然后运行read-in和write函数:

import foreign

statafiles <- list.files("C:\\Users\\Victor\\Folder", pattern="\\.dta$", 
                         recursive = TRUE, full.names = TRUE)

lapply(statafiles, function(x) {
     df <- read.dta(x)
     write.csv(df, gsub(".dta", ".csv", x))
})

以及Python pandas中的对应项,它内置了read and write stata files方法:

^{pr2}$

相关问题 更多 >