2016-07-14 38 views
1

Also schrieb ich ein Skript, um Änderungen an Datenrahmen vorzunehmen, aber ich bin auf ein paar Probleme gestoßen, die ich nicht lösen kann. Zuallererst scheint der Teil, wo ich die Spaltenvariable mac_sector in Sektor umbenennen möchte, nicht zu funktionieren, er benennt nichts um, noch gibt es einen Fehler.Übereinstimmende Namen von Elementen in einer Liste zu Dateinamen & Umbenennen von Variablen in R

Auch wenn ich die geänderten Datensätze speichere, heißen sie einfach 1,2,3 ... usw. Ich möchte jedoch nur, dass sie den gleichen Namen haben, den sie ursprünglich hatten. Ich habe versucht, dies durch "names(dflist)[i] <- gsub("\\.dta$", "", files)" zu tun, aber das funktioniert nicht.

Es diese Warnmeldungen auch ergibt, obwohl ich weiß nicht, ob sie eine tatsächliche Auswirkung auf die Dateien haben, da ich keine Komplikationen gesehen habe: Warnmeldungen:

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. 

Schließlich ist es eine Möglichkeit, Dateien in einem anderen Verzeichnis als Ihrem Arbeitsverzeichnis zu speichern?

Mein Skript:

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 
    } 

Eingang: Datenrahmen 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 

Datenrahmen 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 

Datenrahmen 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 

Antwort

1

Versuchen Sie dies, keine Notwendigkeit für die plyr Bibliothek mehr, sollte als Dateinamen, die Sie an einen neuen Standort wollte umbenennen können, und sparen:

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

Ja ich schon versucht, 'Umbenennen (dflist [[i]] , c ("mac_sector" = "sektor")) ', funktioniert nicht! Keine Namen (dflist) [i] <- gsub ("\\. Dta $", "", Dateien [i]) ', sie werden immer noch als 1,2,3 ... – DuEllier

+0

Schande, Herausforderung ist wir können Ihre Eingabedaten nicht wiederherstellen ... – desc

+1

Ich habe aufgenommen, wie meine Eingabedaten aussehen, wenn das hilft. – DuEllier