如何通过字符对象变量使用dplyr动态重命名数据框列
问题原因
dplyr 默认采用非标准评估规则,rename() 函数中等号左侧的内容会被直接识别为字面量列名,不会解析对应变量存储的字符值,因此你会得到ladder.channel这个固定列名而非变量存储的channel_4。
解决方法
这里提供两种常用实现方案:
方案1:使用 := 海象运算符搭配 !! 实现动态命名(适合单个列重命名场景)
library(dplyr) ladder.channel <- "channel_4" fsa.bc <- y %>% select(-c(all_of(ladder.channel), "correction")) %>% # 等号替换为:=,左侧用!!提取变量存储的字符串作为新列名 rename(!!ladder.channel := channel.corr)
方案2:使用 rename_with 实现(适合单/多列批量重命名场景)
fsa.bc <- y %>% select(-c(all_of(ladder.channel), "correction")) %>% # 第一个参数为新列名生成规则,第二个参数为要重命名的原列名 rename_with(~ ladder.channel, channel.corr)
两种方案执行后,输出colnames(fsa.bc)就能看到对应列已经被重命名为channel_4,而非变量名本身。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

