代码之家  ›  专栏  ›  技术社区  ›  Makoto Miyazaki

R:分两种情况,保留除沫器

  •  0
  • Makoto Miyazaki  · 技术社区  · 7 年前

    我试着根据不同的标准分句。我想在“traction”和“ramasse”后面分句。我查了grepl的语法规则,但不太明白。

    一个称为 export 有专栏 ref ,其str值以“traction”或“ramasse”结尾。

    >export$ref
                            ref
    [1] "62133130_074_traction"
    [2]  "62156438_074_ramasse"
    [3]  "62153874_070_ramasse"
    [4] "62138861_074_traction"
    

    我想把ref列中的str值分成两个。

                    ref           R&T
    [1] "62133130_074_"    "traction"
    [2] "62156438_074_"     "ramasse"
    [3]  "62153874_070_"    "ramasse"
    [4] "62138861_074_"    "traction"
    

    我试过的(没有一个是好的)

    strsplit(export$ref, c("traction", "ramasse"))
    strsplit(export$ref, "\\_(?<=\\btraction)|\\_(?<=\\bramasse)", perl = TRUE)
    strsplit(export$ref, "(?=['traction''ramasse'])", perl = TRUE)
    

    任何帮助都将不胜感激!

    2 回复  |  直到 7 年前
        1
  •  0
  •   Maurits Evers    7 年前

    下面是另一个使用 stringr::str_split :

    library(stringr);
    str_split(ref, pattern = "_(?=[A-Za-z]+)", simplify = T)
    #    [,1]           [,2]
    #[1,] "62133130_074" "traction"
    #[2,] "62156438_074" "ramasse"
    #[3,] "62153874_070" "ramasse"
    #[4,] "62138861_074" "traction"
    

    样本数据

    ref <- c(
        "62133130_074_traction",
        "62156438_074_ramasse",
        "62153874_070_ramasse",
        "62138861_074_traction")
    
        2
  •  1
  •   talat    7 年前

    这里有一个不同的方法:

    strsplit(x, "_(?=[^_]+$)", perl = TRUE)
    
    [[1]]
    [1] "62133130_074" "traction"    
    
    [[2]]
    [1] "62156438_074" "ramasse"     
    
    [[3]]
    [1] "62153874_070" "ramasse"     
    
    [[4]]
    [1] "62138861_074" "traction"
    

    这意味着将列/向量拆分为一个下划线(“uu”),后跟不包含另一个下划线的任意数量的符号。