首页 > 解决方案 > 从列变量中删除前缀字母

问题描述

我有所有以“”开头的列名m。示例:mIncome, mAge。我想删除prefix. 到目前为止,我已经尝试了以下方法:

df %>% 
rename_all(~stringr::str_replace_all(.,"m",""))

这将删除所有包含字母“ m”的列名。我只需要从一开始就将其删除。有什么建议么?

标签: rdplyr

解决方案


我们需要指定位置。匹配字符串的^开头(或此处的列名)。因此,如果我们使用^m,它只会匹配字符串开头或开头的 'm' 而不会匹配其他地方。

library(dplyr)
library(stringr)
df %>% 
      rename_all(~stringr::str_replace(.,"^m",""))
#   ba Mbgeg gmba cfor
#1  1     2    4    6
#2  2     3    5    7
#3  3     4    6    8

此外,如果应该忽略大小写,请使用regex并指定ignore_case = TRUE

df %>%
    rename_all(~ stringr::str_replace(., regex("^m", ignore_case = TRUE), ""))
#  ba bgeg gmba cfor
#1  1    2    4    6
#2  2    3    5    7
#3  3    4    6    8

另一个选项是单词边界 ( \\bm),但这可以匹配有多个单词列名的单词的开头

注意:str_replace_all当我们想要替换多次出现的pattern. 在这里,我们只需要替换第一个实例str_replace就足够了。

数据

df <- data.frame(mba = 1:3, Mbgeg = 2:4, gmba = 4:6, cfor = 6:8)

推荐阅读