r语言 - 如何使用字符对象重命名dplyr列



我想通过使用变量以动态方式使用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

最新更新