我有一个数据集,其列名如下:
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等,不是)。
答案 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+$"))