【问题标题】:R: strsplit based on two conditions, keeping deliminatorR:strsplit 基于两个条件,保持分隔符
【发布时间】:2018-11-25 02:22:26
【问题描述】:

我正在尝试根据不同的标准拆分句子。我希望在“牵引力”之后拆分一些句子,在“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)

任何帮助将不胜感激!

【问题讨论】:

    标签: r string split strsplit


    【解决方案1】:

    这是一种不同的方法:

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

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

    【讨论】:

      【解决方案2】:

      这是另一个使用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")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-04
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        相关资源
        最近更新 更多