【问题标题】:R rename all columns with regexR用正则表达式重命名所有列
【发布时间】:2021-05-22 03:30:50
【问题描述】:

我弄乱了具有以下格式的列名:列名是英文的,后跟一个斜杠(/),后跟一个与年份相同的法语单词。例如

CSD Code / Code de la SDR 2011, Education / Scolarité 2011, Labour Force Activity / Activité sur le marché du travail 2011

是否有一个 tidyverse 友好的解决方案,可以让我通过删除斜杠 (/) 之后的所有内容来重命名所有列,但保留年份。例如: CSD Code 2011, Education 2011, Labour Force Activity 2011

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    您可以使用正则表达式。使用样本数据:

    x <- c("CSD Code / Code de la SDR 2011", 
            "Education / Scolarité 2011", 
            "Labour Force Activity / Activité sur le marché du travail 2011")
    

    你可以使用tidyverse包stringr获取

    stringr::str_replace(x, " / \\D*(?= \\d+$)", "")
    # [1] "CSD Code 2011"             
    # [2] "Education 2011"            
    # [3] "Labour Force Activity 2011"
    

    表达式查找空格和斜杠,然后删除所有非数字字符,只留下最后的数字。

    您可以将其与 dplyr::rename_with 一起用于列名

    my_data %>% 
      rename_with(~stringr::str_replace(., " / \\D*(?= \\d+$)", ""))
    

    【讨论】:

      【解决方案2】:

      您可以提取要与捕获组一起保留的字符串部分。

      library(dplyr)
      
      df %>% rename_with(~sub('(.*)/.*?(\\d+)', '\\1\\2', .))
      

      使用来自@MrFlick 的数据 -

      sub('(.*)/.*?(\\d+)', '\\1\\2', x)
      #[1] "CSD Code 2011"              "Education 2011"            
      #[3] "Labour Force Activity 2011"
      

      【讨论】:

        猜你喜欢
        • 2018-05-13
        • 2020-12-07
        • 2020-01-19
        • 2021-11-04
        • 2014-04-03
        • 2021-09-09
        • 2021-08-27
        • 2018-01-29
        • 2020-11-29
        相关资源
        最近更新 更多