2017-08-25 2 views
1

Ich habe eine Liste der Länge „x“ und ich möchte einen Spaltennamen aller data.frames innerhalb dieser Liste ändern, um einen Vektor von Zeichen von gleicher Länge dieser Liste verwenden, wie unten beschrieben:Wie kann ich Spaltennamen von data.frames innerhalb einer Liste mit Vektor gleicher Länge in R ändern?

a <- data.frame(rep(1:10), letters[1:10]) 
b <- data.frame(rep(11:20), letters[11:20]) 
l <- list(a,b) 
nm <- c("letters1:10","letters11:20") 

ich möchte so etwas wie:

colnames(l[[1]]); colnames(l[[2]]) 

, die mich

[1] "rep.1.10."  "letters.1.10." 
[1] "rep.11.20."  "letters.11.20." 

gibt habe ich versucht, lapply(l, function(x) colnames(x)[2]<-nm) aber es gibt m e eine Liste nur mit nm und ich wollte eine Liste mit den originalen data.frames mit aktualisierten colnames.

Vielen Dank.

Antwort

1

Cludgy, aber es scheint zu funktionieren (wenn ich die Frage verstanden habe).

lapply(as.list(1:2), function(x){colnames(l[[x]])[2] <- nm[x];l[[x]]}) 
+0

Danke! Es hat mir wirklich geholfen. –

+0

Kein Problem! Ich bin sicher, dass es eine elegantere Lösung geben muss, obwohl ... – Lyngbakr

0
Map(function(x,y){colnames(x)[2] <-y;x},l,nm) 
[[1]] 
    rep.1.10. letters1:10 
1   1   a 
2   2   b 
3   3   c 
4   4   d 
5   5   e 
6   6   f 
7   7   g 
8   8   h 
9   9   i 
10  10   j 

[[2]] 
    rep.11.20. letters11:20 
1   11   k 
2   12   l 
3   13   m 
4   14   n 
5   15   o 
6   16   p 
7   17   q 
8   18   r 
9   19   s 
10   20   t 
+0

Vielen Dank! Allerdings möchte ich nur den zweiten Spaltennamen ändern. –

+1

'lapply (l, Funktion (x) {Spaltennamen (x) [2] = nm [1]; x})' – Onyambu

+0

Das ändert nur den zweiten Spaltennamen der beiden Datenrahmen zu der gleichen Sache (dh 'letters11: 20'). Dagegen sollte die zweite Spalte des ersten Datenrahmens "letters1: 10" sein. – Lyngbakr

Verwandte Themen