2016-03-09 86 views
0

我有一個文件夾中的1000個文件.dta:讀取和寫入多個CSV在一個循環中

C:/Folder/data1.dta 
C:/Folder/data2.dta 
C:/Folder/data" ".dta 
C:/Folder/data1000.dta 

我NEAD應用程序歸咎於我的1000個數據,並在新的文件夾中保存此估算數據。

C:/Folder2/data_new1.dta 
C:/Folder2/data_new2.dta 
C:/Folder2/data_new" ".dta 
C:/Folder2/data_new1000.dta 

我已經用LEA包構建了一個複雜的程序,實現了非負矩陣分解的完成。它是這樣的工作:

data1 <- read.dta("C:/Folder/data1.dta") 

***********My program****** 

write.dta (data1, "C:/Folder/data_new1.dta") 

我搜索一個方法來循環這我的1000數據集。隨着Stata的,我可以做這樣的:

forvalues i=1/1000 { 

data`i' <- read.dta("C:/Folder/data`i'.dta") 

***********My program****** 

write.dta (data`i', "C:/Folder/data_new`i'.dta") 

回答

1

使用列表:

f <- dir(pattern = "dta") 
dat <- lapply(f, read.dta) 
# do stuff to every data.frame 
for (i in seq_along(dat)) { 
    write.dta(dat[[i]], paste0("data_new", i, ".dta")) 
} 
+1

的「做的東西給每個數據幀」和write.dta可以都包括內'lapply',與不需要實際將列表保存到對象。 – eipi10