2016-10-18 2 views
0

J'ai une liste de données cadres nomsChangement colnames de l'élément n-ième d'une liste de data.frames

j'ai utilisé des objets() pour les obtenir.

my_list <- objects() 

my_list 

[1]"df1" 
[2]"df2" 
[3]"df3" 
[4]"df4" 
... 

Chaque trame de données a 7 colonnes

J'ai 3 caractères différents vecteurs v1,v2,v3 (longueur 4) que je veux utiliser pour nommer les 4 premières colonnes des trames de données. Je veux fondamentalement réutiliser ces vecteurs dans cet ordre jusqu'à ce que toutes les colonnes de ma liste data.frame soient nommées. IMPORTANT: Je souhaite utiliser les 3 vecteurs pour nommer toutes les trames de données. v1 pour nommer df1, v2 pour nommer df2, v3 pour nommer df3, v1 AGAIN pour nommer df4, etc ...

df1 

    X1 X2 X3 X4 X5 X6 X7 
1 NA NA NA NA NA NA NA 
2 NA NA NA NA NA NA NA 
3 NA NA NA NA NA NA NA 

v1 <- c(a,b,c,d)  


magic(my_list) 

df1 

    a b c d X5 X6 X7 
1 NA NA NA NA NA NA NA 
2 NA NA NA NA NA NA NA 
3 NA NA NA NA NA NA NA 
... 

Répondre

1

Setnames du paquet data.table fonctionnera.

setnames(df,old = c(1:4), new = v1[1:4]) 

edit: Si vous voulez faire pour votre liste complète, vous pouvez utiliser lapply.

lapply(l, function(x) setnames(x,old = c(1:4), new = v1[1:4])) 

Edit2: Le recyclage des 3 vecteurs, et de le garder un peu facile à lire -

for (i in 1:length(l)) 
      { 
    if (i%%3 == 1) { 
    setnames(l[[i]],old = c(1:4), new = v1[1:4]) 
    } 
    else if (i%%3 == 2) { 
    setnames(l[[i]],old = c(1:4), new = v2[1:4]) 
    } 
    if (i%%3 == 0) { 
    setnames(l[[i]],old = c(1:4), new = v3[1:4]) 
    } 
} 
+0

correct, juste les 4 premiers – jesusgarciab

+0

Je ne suis pas très familier avec data.table encore, et je Je suis relativement nouveau à R. Comment pourrais-je recycler les 3 vecteurs à travers ma liste de trames de données? – jesusgarciab

+0

Ma réponse devrait fonctionner si vous ne l'avez pas encore vu @jesusgarciab –