如何使用dplyr和字符对象重命名列

5

我想使用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"
2个回答

3
你可以使用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

在基本的 R 语言中 -
names(y)[match('mpg', names(y))] <- new_name
y

3
使问题可重现:
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创建的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接