首页 > 解决方案 > 以整数 r 结尾的列名加 1

问题描述

我的问题很简单,我有一个包含许多列的数据框,其中一些以 开头q03b_,如下所示:

ID  ...  q03b_0 q03b_1 q03b_2 ... q03b_14
 1  ...    a      b      c           m

但我需要将列名更改为q03b_other_1q03b_other_2q03b_other_3等(从 1 开始计数,而不是 0)。我设法选择了列rename_at并将“其他”添加到列名中,如下所示:

df  %>% 
  rename_at(vars(matches('q03b_')), list(~ str_replace(., "b_(\\d+)", "_other_\\1")))

这带来了这样的数据框:

ID  ...  q03_other_0 q03_other_1 q03_other_2 ... q03_other_14
 1  ...    a               b          c               m

但我正在努力进入最后阶段,这将是:

ID  ...  q03_other_1 q03_other_2 q03_other_3 ... q03_other_15
 1  ...    a                b           c                m

我想我需要使用 and 的组合as.numericas.character但是由于整洁的评估,我正在努力寻找一种方法来完成这项工作。有任何想法吗?

谢谢 !

标签: rdplyrrename

解决方案


gsubfn

library(dplyr)
library(readr)
library(gsubfn)

df %>%
  rename_at(vars(matches('q03b_')), 
            list(~ gsubfn("b_\\d+$", 
                          ~ paste0("_other_", 
                                   parse_number(x) + 1), 
                          .)))

输出

  q03_other_1 q03_other_2 q03_other_3
1           a           b           c

推荐阅读