2016-07-14 7 views
1

データフレームを変更するためのスクリプトを作成しましたが、私は解決できないようないくつかの問題を抱えています。まず第一に、変数mac_sectorをセクタにリネームしたい部分は動作していないように見えますが、名前を変更したり、エラーを出すことはありません。リスト内の要素の名前とファイル名の一致と名前の変更R

また、私が修正したデータセットを保存すると、単に1,2,3 ...と呼ばれます。しかし、実際には元の名前と同じ名前にしておきたいだけです。私は"names(dflist)[i] <- gsub("\\.dta$", "", files)"でこれをやろうとしましたが、うまくいきません。

それは、彼らがファイルの実際の効果を持っている場合、私は、私は何の合併症は見られなかったように、知っていないものの、同様にこれらの警告メッセージを与える: 警告メッセージ:

1: In save.dta13(dflist[[i]], paste0(i, ".dta")) : 
    Number of variable labels does not match number of variables. 
      Variable labels dropped. 
2: In save.dta13(dflist[[i]], paste0(i, ".dta")) : 
    Number of variable labels does not match number of variables. 
      Variable labels dropped. 
3: In save.dta13(dflist[[i]], paste0(i, ".dta")) : 
    Number of variable labels does not match number of variables. 
      Variable labels dropped. 

最後に、そこにありますあなたの作業ディレクトリ以外のディレクトリにファイルを保存する方法?

マイスクリプト:

setwd("C:\\....") 

    files = list.files(pattern="*.dta") 
    dflist <- list() 

    for (i in 1:length(files)){ 
     dflist[[i]] <- read.dta13(files[i], nonint.factors = TRUE) 


     if("mac_sector" %in% colnames(dflist[[i]])){   #rename mac_sector to sector if present 
     rename(dflist[[i]], c(mac_sector="sector"))} 

     if(!("sector" %in% colnames(dflist[[i]]))){    #This creates "sector" variable if it doesn't exist already. 
     dflist[[i]]$sector <- "total"} 


     names(dflist)[i] <- gsub("\\.dta$", "", files)   #Matching the names of the elements to the filenames 

     save.dta13(dflist[[i]], paste0(i, ".dta"))    #Saving dataset 
    } 

入力: データフレーム1:

country  SA year   DV  VI  DI  DIV  DIV_s DIV_p     t   ta    
1 AUSTRIA NA 2001   0  NA  NA  NA  NA  NA     0    NA 
2 AUSTRIA NA 2002   0  NA  NA  NA  NA  NA     0    NA 
3 AUSTRIA NA 2003   0  NA  NA  NA  NA  NA     0    NA 
4 AUSTRIA NA 2004   0  NA  NA  NA  NA  NA     0    NA 
5 AUSTRIA NA 2005   0  NA  NA  NA  NA  NA     0    NA 

データフレーム2:

country  mac_sector  SA year   DV  VI  DI  DIV  DIV_s DIV_p     t   ta 
1 BELGIUM  ing   0 2001   0  NA  NA  NA  NA  NA    3036  0.09725133 
2 BELGIUM  ing   0 2002   0  NA  NA  NA  NA  NA    2970  0.09641831 
3 BELGIUM  ing   0 2003   0  NA  NA  NA  NA  NA    2917  0.09791633 
4 BELGIUM  ing   0 2004   0  NA  NA  NA  NA  NA    2907  0.10297798 
5 BELGIUM  ing   0 2005   0  NA  NA  NA  NA  NA    2904  0.10182869 

データフレーム3:

country      sector SA year   DV  VI  DI  DIV  DIV_s DIV_p     t   ta 
1 BELGIUM      prod  0 2001   0  NA  NA  NA  NA  NA    392  0.09688306 
2 BELGIUM      prod  0 2002   0  NA  NA  NA  NA  NA    398  0.09394456 
3 BELGIUM      prod  0 2003   0  NA  NA  NA  NA  NA    394  0.09536502 
4 BELGIUM      prod  0 2004   0  NA  NA  NA  NA  NA    404  0.10367264 
5 BELGIUM      prod  0 2005   0  NA  NA  NA  NA  NA    407  0.08961585 

答えて

1

名前を変更し、新しい場所に望んでいたファイル名として保存することができるはずです、もう、plyrライブラリーのための必要性を、これを試してみてくださいません:

setwd("C:\\...") 
files = list.files(pattern="*.dta") 
dflist <- list() 

for (i in 1:length(files)){ 
    dflist[[i]] <- read.dta13(files[i],header=TRUE) 

    if("mac_sector" %in% colnames(dflist[[i]])){   #rename mac_sector to sector if present 
    names(dflist[[i]])[names(dflist[[i]])=="mac_sector"] <- "sector" 
    #rename(dflist[[i]], replace = c("mac_sector"="sector"))} 

    if(!("sector" %in% colnames(dflist[[i]]))){    #This creates "sector" variable if it doesn't exist already. 
    dflist[[i]]$sector <- "total"} 


names(dflist)[i] <- gsub("\\.dta$", "", files[i])   #Matching the names of the elements to the filenames 

save.dta13(dflist[[i]],paste0("C:\\...\\newlocation\\",names(dflist)[i], ".dta"))    #Saving dataset 
} 
+0

はい、私はすでに '名前を変更しようとした(dflist [[I]] 、c( "mac_sector" = "sector")) '、動作しません! '名前(dflist)[i] < - gsub(" \\。dta $ "、" files [i]) 'はまだ1,2,3 ...と保存されています... – DuEllier

+0

私たちはあなたの入力データを再作成することができません... – desc

+1

私は入力データがどのように見えるかを含めました。 – DuEllier

関連する問題