How do you rename a column with dplyr using a character object [duplicate]
Asked Answered
L

2

5

I'd like to rename a column using dplyr in a dynamic way by using a variable. However, it just names the column what the variable is called, rather than its content. Any ideas??

colnames(y)
[1] "time"         "channel_1"    "channel_2"    "channel_3"    "channel_4"    "channel_5"    "correction"   "channel.corr"

ladder.channel <- "channel_4"
fsa.bc <- y %>%
    select(-c(all_of(ladder.channel), "correction")) %>%
    rename(ladder.channel = channel.corr)

colnames(fsa.bc)
"time"           "channel_1"      "channel_2"      "channel_3"      "channel_5"      "ladder.channel"
Linger answered 1/9, 2021 at 9:37 Comment(0)
F
3

Making the question reproducible:

library(dplyr)

y <- mtcars[, 1:8]

names(y) <- c("time", "channel_1",  "channel_2", "channel_3", "channel_4", "channel_5", "correction",  "channel.corr")

ladder.channel <-  "channel_4"

fsa.bc <- 
  y %>%
  select(-c(all_of(ladder.channel), "correction"))%>% 
  rename({{ladder.channel}} := channel.corr)

names(fsa.bc)
#> [1] "time"      "channel_1" "channel_2" "channel_3" "channel_5" "channel_4"

Created on 2021-09-01 by the reprex package (v2.0.0)

Fredella answered 1/9, 2021 at 9:54 Comment(0)
F
3

You can use rename_with -

library(dplyr)

y <- mtcars
new_name <- 'MPG'
y %>% rename_with(~new_name, mpg) %>% head

#                   MPG cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

In base R -

names(y)[match('mpg', names(y))] <- new_name
y
Fitter answered 1/9, 2021 at 10:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.