J'essaye de remplacer une boucle for par des fonctions R tidyverse
.
J'ai une série de colonnes avec les noms: OQ1, OQ2, OQ3 .... OQ45
et je veux changer leurs noms en OQ_45_1, OQ_45_2 ... OQ_45_45
Je l'ai fait en utilisant la boucle for mais y a-t-il de toute façon utiliser des tubes%>%?
3 Réponses :
Nous pouvons utiliser rename_at
:
cols <- grep('^OQ', names(df)) names(df)[cols] <- paste0('OQ_45_', seq_along(cols))
En base R, vous pouvez le faire avec
library(dplyr) df %>% rename_at(vars(starts_with('OQ')), ~paste0('OQ_45_', seq_along(.)))
si vous avez des noms déjà stockés dans le vecteur, n_vec <- paste0 ("OQ", 1:20) (t_vec <- str_replace (n_vec, pattern = "OQ", replacement = "OQ_45_"))
Si toutes les colonnes que vous devez modifier commencent par 'QO', vous pouvez renommer_all en utilisant gsub.
library(dplyr) tibble(OQ1 = NA, OQ2 = NA, OQ3 = NA) %>% rename_all( ~ gsub("^OQ", "OQ_45_", .x)) #> # A tibble: 1 x 3 #> OQ_45_1 OQ_45_2 OQ_45_3 #> <lgl> <lgl> <lgl> #> 1 NA NA NA
Créé le 18/05/2020 par paquet reprex (v0.3.0)
Nous pouvons utiliser str_c
library(dplyr) library(stringr) library(dplyr) df %>% rename_at(vars(starts_with('OQ')), ~str_c('OQ_45_', seq_along(.)))