更改多个列的名称

时间:2019-08-24 11:23:43

标签: r

我有一个数据集,其列名如下:

colnames(samp) 

[1] "RESPID"             "SAMPLE"             "Weight"             "Q1"                 "Q19A_1"            
 [6] "Q19B_1"             "Q19C_1"             "Q19E_1"             "Q19F_1"             "RECORDERLOOP_Q20_1"
[11] "RECORDERLOOP_Q20_2" "RECORDERLOOP_Q20_3" "RECORDERLOOP_Q20_4" "Q20_1_1"            "Q20_2_1"           
[16] "Q20_3_1" 

对于以“ Q19”或“ Q20”开头的列名(即某种模式),我要删除_1(即_和数字)。

我知道它如何作用于一列(例如Q19)。可能是这样的:

library(dplyr)

samp_subset = samp %>%
  select(dplyr::contains("Q19")) 

colnames(samp_subset) = sub('.{02}$', '', colnames(samp_subset))

但是,我不知道如何定义某些列的表达式(例如,对于Q19和Q20,但对于RESPID或Sample等,不是)。

2 个答案:

答案 0 :(得分:2)

使用dplyr,您可以尝试rename_at

library(dplyr)
df %>%  rename_at(vars(matches("^Q19|^Q20")), ~sub("_\\d+$", "", .))

使用基数R,我认为将需要两个步骤来标识列和替换值。

vals <- grep("^Q19|^Q20", names(df))
names(df)[vals] <- sub("_\\d+$", "", names(df)[vals])

答案 1 :(得分:1)

我们可以使用

library(dplyr)
library(stringr)
df %>%
    rename_at(vars(matches("^Q(19|20)")), ~ str_remove(., "_\\d+$"))