2

そのため、dta から csv への変換のインスタンスが 1 つあり、ディレクトリ内のすべてのファイルに対してそれを繰り返す必要があります。SOの大きな助けですが、まだ十分ではありません。これが単一のインスタンスです

#Load Foreign Library
library(foreign)

## Set working directory in which dtw files can be found)
setwd("~/Desktop")

## Single File Convert
write.csv(read.dta("example.dta"), file = "example.csv")

ここから、次のようなものを使用すると思います。

## Get list of all the files
file_list<-dir(pattern = ".dta$", recursive=F, ignore.case = T)

## Get the number of files
n <- length(file_list)

## Loop through each file
for(i in 1:n) file_list[[i]]

しかし、適切な構文、式などについてはよくわかりません。以下の優れたソリューションを確認した後、混乱し (必ずしもエラーが発生するわけではありません)、手動で実行しようとしています - エレガントな方法の簡単なヒントディレクトリ内の各ファイルを変換しますか?

レビューされた回答は次のとおりです。

Stata ソフトウェアを使用せずに Stata .dta ファイルを CSV に変換する

単一ファイル用に用意されたRスクリプトをディレクトリ内の複数ファイルに適用する

ディレクトリから複数のファイルを読み取る、R

ありがとう!!

答えを得ました: これが最終的なコードです:

## CONVERT ALL FILES IN A DIRECTORY

## Load Foreign Library
library(foreign)

## Set working directory in which dtw files can be found)
setwd("~/Desktop")

## Convert all files in wd from DTA to CSV
### Note: alter the write/read functions for different file types.  dta->csv used in this specific example

for (f in Sys.glob('*.dta')) 
  write.csv(read.dta(f), file = gsub('dta$', 'csv', f))
4

1 に答える 1

2

ファイルが現在の作業ディレクトリにある場合、 を使用Sys.globして名前を取得してから、このベクトルをループする方法があります。

for (f in Sys.glob('*.dta')) 
    write.csv(read.dta(f), file = gsub('dta$', 'csv', f))
于 2013-03-29T16:21:11.753 に答える