3 votes

renommer des colonnes spécifiques dans un cadre de données en R

J'essaie de changer les noms de colonnes spécifiques d'un cadre de données dans R. Par exemple, Si j'ai un cadre de données qui ressemble à quelque chose comme ceci :

df <- data.frame(
x1 = rnorm(10),
y1 = rnorm(10),
x2 = rnorm(10),
y2 = rnorm(10),
x3 = rnorm(10),
y3 = rnorm(10)
)
head(df,3)

           x1          y1         x2          y2         x3         y3
1 -1.42423743  0.21855807 -0.1456853  1.46204179  1.6474040  2.2384782
2  1.17158831 -1.41602524 -1.2891551  1.45028848 -1.2726250 -0.3331051
3 -0.21959357  0.84741665  0.2745170  0.81040227 -0.3520883 -0.3103068

Ce que je veux faire, c'est changer les noms de tous les éléments suivants y (c.-à-d., y1, y2, y3) pour simplement y . Le cadre de données résultant ressemblerait donc à ceci :

           x1           y         x2           y         x3          y
1 -1.42423743  0.21855807 -0.1456853  1.46204179  1.6474040  2.2384782
2  1.17158831 -1.41602524 -1.2891551  1.45028848 -1.2726250 -0.3331051
3 -0.21959357  0.84741665  0.2745170  0.81040227 -0.3520883 -0.3103068

Je réalise qu'il y a maintenant plusieurs colonnes y dans le cadre de données, mais pour mes besoins, c'est nécessaire.

Je ne suis pas sûr de savoir comment faire, mais j'ai pensé à faire une boucle dans le df et à changer les noms des colonnes... ce code ne fonctionne pas, mais je pensais à quelque chose comme ceci :

for(j in 1:length(df)){
  colnames(df$[j])[which(names(df$[j]) == "y[j]")] <- "y"
} 

Avez-vous une idée de la façon dont je pourrais y parvenir ?

4voto

Ronak Shah Points 24715

Il n'est pas conseillé d'avoir plusieurs colonnes avec le même nom mais si vous devez quand même le faire, voici une solution

names(df)[grep("^y", names(df))] <- "y"

Ou une approche sans regex

names(df)[startsWith(names(df), "y")] <- "y"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X