2016-03-21 7 views
0

Let Ich habe eine Liste (list1), den Datenrahmen besteht (DF1, DF2, .., DFN):einen Datenrahmen Entadressierung von Spaltennamen des Datenänderungsrahmen

Jeden Datenrahmen unterschiedliche Anzahl von Spalten bestehen . Als Beispiel

list1[[1]]=df1 

wo df1:

x  y 
---- ----- 
45  6 
65  87 
12  90 

und

list1[[2]]=df2 

wo df2:

a  b  c 
---- ---- ---- 
23  67  43 
71  13  8 
2  9  12 

Ich möchte fehlenden oder list1 als Returns DF1 und DF2

df1:

a1  a2 
---- ----- 
45  6 
65  87 
12  90 

DF2: Nämlich

b1  b2  b3 
---- ---- ---- 
23  67  43 
71  13  8 
2  9  12 

,

  • ersten Datenrahmen (df1) wird Headern als a1, a2, a3 .....

  • zweiten Datenrahmen (df2) wird Header wie b1, b2, b3 .....

  • dritten Datenrahmen (DF3) wird als Header c1, c2, c3 .....

und geht weiter.

Wie kann ich das in R tun? Ich werde mich sehr für jede Hilfe freuen. Danke vielmals.

+1

Warum möchten Sie nicht in einer Liste zu halten? Schau dir 'list2env' und 'setNames' an, wie es sich anhört. – A5C1D2H2I1M1N2O1R2T1

+0

@A Handcart Und Mohair, Da ich jeden Datenrahmen als Excel-Datei exportieren werde, möchte ich sie aufheben. – oercim

+0

Sie können 'lapply' verwenden, anstatt viele Objekte in Ihrem Arbeitsbereich zu erstellen. Wie auch immer, 'list2env' wird tun, was Sie eine" unlist "-Aktivität nennen. – A5C1D2H2I1M1N2O1R2T1

Antwort

3

Hier ist ein Modell von dem, was ich in den Kommentaren beschrieben habe. Ich zeige nicht list2env, weil das zu Ihrem Endziel unnötig scheint.

Beispieldaten:

myList <- replicate(10, data.frame(v1 = 1:2, v2 = 3:4), FALSE) 

Spalten umbenennen und Schreiben der Daten in CSV-Dateien:

lapply(seq_along(myList), function(x) { 
    FileName <- sprintf("%s.csv", letters[x]) 
    write.csv(setNames(myList[[x]], paste0(letters[x], 1:length(myList[[x]]))), 
      file = FileName, row.names = FALSE) 
}) 

Das Ergebnis wäre 10 CSV-Dateien sein, mit dem Namen a.csv, b.csv, und so weiter, wobei a.csv wird Spalten mit dem Namen "a1" ... "an" haben.

3

So können Sie Spalten für Datenrahmen in einer Liste mithilfe einer Schleife umbenennen.

for (i in seq_along(list1)) { 
    setNames(list1[[i]], paste0(letters[i], seq_along(list1[[i]]))) 
} 
2

Vielen Dank @A Handwerk und Mohair und @Gregor für Ihre Zeit. Mit den Vorschlägen von @A Handcraft And Mohair, ist mein Code wie folgt:

list2<-list() 
for(i in seq_along(list1)) 
    { 
list2[[i]]<-setNames(list1[[i]], paste(letters[[i]],1:ncol(list1[[i]]))) 
} 
Verwandte Themen