代码之家  ›  专栏  ›  技术社区  ›  LLL

从R中的变量名中删除部分但不是全部数字

  •  0
  • LLL  · 技术社区  · 8 年前

    我想从数据帧(如df1)的变量名中删除数字,以生成数据帧(如df2)。我希望只有在存在数字的情况下才能删除数字 至少两个连续文字字符 之前 数字,带 例外

    df1 <- data.frame("ACO2_E1_E2"=c(1,1,1),"BCKDHB6_E1"=c(1,1,1) ,
                      "CDDD4_E3"=c(1,1,1),"HDFE1"=c(1,1,1))
    

    所需df:

    df2 <- data.frame("ACO_E1_E2"=c(1,1,1),"BCKDHB_E1"=c(1,1,1) ,
                      "CDDD4_E3"=c(1,1,1),"HDFE"=c(1,1,1))
    

    我的尝试:(我设法删除/保留了正确的数字,但只是不加区分地删除/保留,并且不知道如何在数字之前引入至少两个连续单词字符的其他标准。)

    gsub('[0,1,2,3,5,6,7,8,9]+', '', names(df1))
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   G. Grothendieck    8 年前

    匹配两个文字字符,后跟一个非4位数字,并将其替换为文字字符:

    x <- gsub("([A-Z]{2})[0-35-9]", "\\1", names(df1))
    x
    ## [1] "ACO_E1_E2" "BCKDHB_E1" "CDDD4_E3"  "HDFE"   
    
    identical(x, names(df2))
    ## [1] TRUE