【问题标题】:Extracting a string based on position of found character in R根据R中找到的字符的位置提取字符串
【发布时间】:2016-06-15 09:11:01
【问题描述】:

我在下面的句子中找出了“oo”的位置:

sentence <- "It is a good book. Good for first reading.
This book explains everything in Qdetail with tons of examples and exercises for practice. Good for cracking written tests on campuses and competitive exams. It is cheap so any way one can have a copy along with other books"

pos = gregexpr("oo", sentence)

我得到的结果是

> pos
[[1]]
[1]  10  15  21  50 136 263
attr(,"match.length")
[1] 2 2 2 2 2 2
attr(,"useBytes")
[1] TRUE

根据结果,我想从每个位置提取10个字符(位置前5个,位置后5个)

例如, 我应该得到第一个位置的结果 “是个好人” 我希望对每个职位都进行这种提取。 由于我是 R 新手,所以我不知道该怎么做。 这个你能帮我吗。

如果我必须提取如下所示的单词,我该怎么办: 我应该为第一个匹配实例获得“一本好书”

【问题讨论】:

    标签: r text split


    【解决方案1】:

    我们可以在unlist 输出gregexpr 之后使用substring

    v1 <- unlist(gregexpr("oo", sentence))
    substring(sentence, v1 - 5, v1 +5)
    #[1] "s a good bo" "ood book. G" "ok. Good fo" "his book ex" "ce. Good fo" "her books"  
    

    【讨论】:

    • Heyy akrun 对于上述问题,如果我想提取包含短语的单词前后的两个单词,我该怎么办?例如,我应该为第一个匹配实例获得“一本好书”。
    • @Maddy 不是很清楚。第一场比赛将永远与"oo" 匹配。最好作为新问题发布。
    【解决方案2】:

    你也可以

    mapply(
      substr, 
      x=sentence, 
      start=pos[[1]]-5, 
      stop=pos[[1]]+5, 
      USE.NAMES = F
    )
    # [1] "s a good bo" "ood book. G" "ok. Good fo"
    # [4] "his book ex" "ce. Good fo" "her books"  
    

    【讨论】:

    • 非常感谢大家的快速回复
    • Heyy lukeA 对于上述问题,如果我想提取包含该短语的单词前后的两个单词,我该怎么办?例如,我应该为第一个匹配实例获得“一本好书”。
    • 你应该发布一个新问题。
    【解决方案3】:

    如果你不介意使用 stringr 包

    library(stringr)
    ind<-str_locate_all(sentence,"oo")[[1]][ ,1]
    str_sub(sentence,ind-5,ind+5)
    
    
    [1] "s a good bo" "ood book. G" "ok. Good fo" "his book ex" "ce. Good fo" "her books" 
    

    【讨论】:

      【解决方案4】:
      pos = gregexpr("oo", sentence)
      

      调整位置和长度:

      pos[[1]] <- pmax(pos[[1]] - 5, 0)
      attr(pos[[1]], "match.length")[] <- 11
      regmatches(sentence, pos)
      #[[1]]
      #[1] "s a good bo" "ood book. G" "ok. Good fo" "his book ex" "ce. Good fo" "her books" 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多