2016-03-27 6 views
-3

Ich habe eine solche Liste (list1) jedes Element ist ein Datenrahmen, die aus einer Spalte bestehen.Fehler beim Ändern der Spaltennamen von Datenrahmen in einer Liste-R

Alle Spaltennamen sind gleich "x". Ich möchte Spaltennamen wie "x1", "x2", ...., "xn" ändern.

ich Code unten verwenden:

lapply(list1, function(x) setNames(x, "x",paste("x",1:seq_along(list1)))) 

Allerdings ist dieser Code nicht funktioniert. Warum funktioniert dieser Code nicht? Ich werde mich sehr für jede Hilfe freuen. Danke vielmals.

@ David Arenburg, herausgegeben ich Code wie unten (10 der elment Zahl in list1 ist):

lapply(list1, function(z) setNames(z,paste0("x",1:10))) 

Dieser Code keine Fehler nicht geben, aber es ändert sich auch nicht, die Spalte names.The Spaltennamen Ars immer noch "x".

Ich bearbeitet das wie unten, jedoch funktioniert es immer noch nicht.

for(i in 1:10) 
{ 
    list2[[i]]<-setNames(data.frame(list1[[i]])[,1], paste0("x",1:10)[i]) 
} 

Ich entfernte seq_along für jetzt. Ich werde daran arbeiten, nachdem ich das gewünschte Ergebnis erzielt habe.

Jedes Element von list1 ist ein Datenrahmen und jeder Datenrahmen hat nur eine Spalte.

+1

Dies ist nicht reproduzierbar, aber '1: seq_along (list1)' wird nicht ordnungsgemäß funktionieren. Versuchen Sie '1: seq_along (mtcars)'. Dies sollte nur 'seq_along (mtcars)' sein. Aber in deinem Fall ist es nicht klar, wie benutzt du 'x' hier, da du' list1' immer noch in 'seq_along' überträgst. Das ergibt für mich keinen Sinn. Außerdem ist Ihre Verwendung von 'setNames' unklar. Es sollte 2 Eingänge haben - nicht 3. Und wahrscheinlich sollte das "paste0" sein - nicht "einfügen", da Sie wahrscheinlich möchten, dass Ihre Namen synthetisch gültig sind. –

+0

Ordnen Sie das Ergebnis einem Objekt zu? –

+0

'setNames' wird nicht an Ort und Stelle geändert. Sie müssen es irgendwo zuweisen. Und wie bereits erwähnt, [das ist nicht reproduzierbar] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Und was ist mit "Seq_along" passiert? Und was meinst du mit "* bestehen aus einer Spalte *"? Wie viele Spalten gibt es? –

Antwort

1

Wenn Sie den Namen jeder Spalte in mehrere Datenrahmen ändern möchten, die eine Liste machen, sollten Sie Folgendes tun:

# Artificial list with each data frame containing columns with values from 1 to 3 

list1 = list(data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3), 
     data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3), 
     data.frame(x = 1:3), data.frame(x = 1:3), data.frame(x = 1:3), 
     data.frame(x = 1:3)) 

# Assigning column names of individual data frames 

for(i in 1:length(list1)){ 
    colnames(list1[[i]]) = paste("x",i, sep = "") 
} 

Ich habe eine Liste mit mehreren Datenrahmen, die jeweils einer von ihnen enthaltende Spalte x. Da Sie die Namen von Spalten in Datenrahmen ändern möchten, ist die Zuweisung mehrerer Werte in setNames() an jeden einzelnen Datenrahmen nicht hilfreich. Daher müssen Sie x mit einzelnen Werten (von 1 bis Länge Ihrer Liste) in die Spaltennamen einzelner Datenrahmen einfügen.

Verwandte Themen