2013-03-29 3 views
1

dta에서 csv로 변환하는 단일 인스턴스가 있으므로 디렉토리의 모든 파일에 대해이 작업을 반복해야합니다. 너무 좋아,하지만 난 아직도 거기에 있지 않습니다. 여기에 단일 인스턴스루프에서 모든 .dta 파일을 디렉토리의 .csv로 변환하는 적절한 구가

여기에서
#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]] 

을하지만 적절한 구문의 확실하지 않다, 표현법 등 아래의 큰 솔루션을 검토 한 후, 난 그냥 혼란스러워 (필연적으로 오류가 발생하지 않는) 수동으로 할거야 - 우아한 방법에 대한 빠른 팁 디렉토리에있는 각 파일을 통해 가서 그것을 변환? 검토

답변은 다음과 같습니다

Convert Stata .dta file to CSV without Stata software

applying R script prepared for single file to multiple files in the directory

Reading multiple files from a directory, 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)) 

답변

1

파일이 현재 작업 디렉토리에있는 경우, 하나의 방법은 이름,이 벡터를 통해 다음 루프를 얻을 수 Sys.glob을 사용하는 것입니다.

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

이것은 완벽하고 질문에서 대답까지 7 분이 걸렸습니다. 나는 1 시간 전에 그렇게 물어야했다. – anjarp