1
votes

Existe-t-il un moyen d'utiliser tidyverse R pour modifier plusieurs noms de colonnes par série ascendante?

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%>%?


0 commentaires

3 Réponses :


4
votes

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(.)))


1 commentaires

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_"))



3
votes

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)


0 commentaires

-1
votes

Nous pouvons utiliser str_c

library(dplyr)
library(stringr)
library(dplyr)
df %>%
      rename_at(vars(starts_with('OQ')), ~str_c('OQ_45_', seq_along(.)))


0 commentaires