我想通过使用变量以动态方式使用dplyr重命名一个列。但是,它只是将变量的名称命名为列,而不是其内容。有什么想法?
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"
让问题重现:
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"
由reprex包(v2.0.0)在2021-09-01创建
您可以使用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