我有一个这样的数据帧
df = data.frame(
do_not_rename = 1:3,
rename1 = 1:3,
rename2 = 1:3)
假设我只想通过在前面添加"已完成"来重命名那些以"rename"
开头的"finished_renamex"
。
我该怎么做?想象一下,如果我有数千个变量。
使用dplyr::rename_at
和start_with
助手
library(dplyr)
df %>% rename_at(vars(starts_with('rename')), ~paste0('finished_',.))
do_not_rename finished_rename1 finished_rename2
1 1 1 1
2 2 2 2
3 3 3 3
使用基本 R
colnames(df)[grep('^rename',names(df))] <- paste0('finished_',grep('^rename',names(df), value = TRUE))
在基本 R 中,我们可以使用startsWith
来识别以前缀开头的列名
inds <- startsWith(names(df), "rename")
#Or grep
#inds <- grep("^rename", names(df))
names(df)[inds] <- paste0("finished_", names(df)[inds])
df
# do_not_rename finished_rename1 finished_rename2
#1 1 1 1
#2 2 2 2
#3 3 3 3
在一行中,您可以使用gsub
names(df) <- gsub('^rename(.)','finished_rename\1', names(df))
names(df)
[1] "do_not_rename" "finished_rename1" "finished_rename2"
如果您有超过 9 个像这样编号的列,则应在.
后使用+
字符
names(df) <- gsub('^rename(.+)','finished_rename\1', names(df))
一般来说,gsub 是要走的路。