Boucle renommer certaines colonnes

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

Boucle renommer certaines colonnes

Messagepar Elsa Nario » 09 Sep 2021, 12:43

Bonjour,
Je souhaite renommer certaines colonnes d'un df (à partir de la 5ème colone) en ajoutant un indice à mon nom (avec les colonnes "item1", "item2", "item3", etc). Soit je me retrouve avec des colonnes renommées de la même façon soit ça ne fonctionne pas.
Quelle serait la solution la + automatique ? Merci

Code : Tout sélectionner

df <- data.frame(matrix(1:30, 3, 10))

for(i in 1:length(df)-5) {
  colnames(TURFCOL)[5:length(df)]  <- paste0("item", i)
}

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Boucle renommer certaines colonnes

Messagepar Logez Maxime » 09 Sep 2021, 13:10

Bonjour,

Pour comprendre et apprendre le langage, je t'invite à décortiquer ton code ligne par ligne, voir même élément par élément.
Par exemple :

Code : Tout sélectionner

1:length(df)-5

Je ne suis pas sur que ce soit ce que tu cherches à faire.
Tout comme :

Code : Tout sélectionner

colnames(TURFCOL)[5:length(df)]

Ici il y a plusieurs problèmes.

Le plus simple si ce sont les noms de df que tu cherches à modifier :

Code : Tout sélectionner

colnames(df)[5:ncol(df)] <- paste("item", 1:(length(df)-4))
 df
  X1 X2 X3 X4 item 1 item 2 item 3 item 4 item 5 item 6
1  1  4  7 10     13     16     19     22     25     28
2  2  5  8 11     14     17     20     23     26     29
3  3  6  9 12     15     18     21     24     27     30


Il n'y a pas toujours besoin de boucle. R fonctionne le plus efficacement en vectorisant les calculs, c'est à dire en appliquant la même opération aux différents éléments d'un vecteur.
Si tu as besoin de calculer la racine carrée des valeurs contenues dans un vecteur, tu ne vas pas calculer via une boucle la racine de chacune des valeurs mais tu vas appliquer la fonction racine carrée directement sur ton vecteur pour que toutes les valeurs soient transformées.

Cordialement,
Maxime

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Boucle renommer certaines colonnes

Messagepar Eric Casellas » 09 Sep 2021, 13:13

Bonjour,

Dans ton code le soucis viens de la combinaison des faits que :
1- le nombre d'itérations de la boucle est le même que le nombre de colonnes (même celle a ne pas renommer)

Code : Tout sélectionner

> 1:length(df)-5
 [1] -4 -3 -2 -1  0  1  2  3  4  5

2- a chaque itération de la boucle tu modifie le noms de toutes les colonnes à partir de la 5eme
Du coup tu te retrouve avec la valeur de la derniere itération dans toutes les colonnes.

Un exemple avec une boucle uniquement sur les colonnes à modifier et changement d'une colonne à la fois

Code : Tout sélectionner

df <- data.frame(matrix(1:30, 3, 10))
for(i in 1:(length(df)-4)) {
  colnames(df)[i+4]  <- paste0("item", i)
}


Et sinon en général avec R on préfère éviter les boucle quand on le peut avec une approche vectorisée

Code : Tout sélectionner

df <- data.frame(matrix(1:30, 3, 10))
colnames(df)[5:length(df)] <- paste0("item", 5:length(df)-4)


Eric
Eric

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

Re: Boucle renommer certaines colonnes

Messagepar Elsa Nario » 09 Sep 2021, 13:27

je comprends mieux, merci.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité