【发布时间】:2020-01-05 04:57:15
【问题描述】:
我有一个这样的data.frame
df = data.frame(
do_not_rename = 1:3,
rename1 = 1:3,
rename2 = 1:3)
假设我只想通过在前面添加“完成”将那些以 "rename" 开头的名称重命名为 "finished_renamex"。
我该怎么做?想象一下,如果我有数千个变量。
【问题讨论】:
标签: r
我有一个这样的data.frame
df = data.frame(
do_not_rename = 1:3,
rename1 = 1:3,
rename2 = 1:3)
假设我只想通过在前面添加“完成”将那些以 "rename" 开头的名称重命名为 "finished_renamex"。
我该怎么做?想象一下,如果我有数千个变量。
【问题讨论】:
标签: r
使用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))
【讨论】:
在base 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 是可行的方法。
【讨论】: