如何为R中的向量中的每个元素找到文本字符串的匹配位置

  • 本文关键字:文本 字符串 位置 向量 元素 r
  • 更新时间 :
  • 英文 :


我有一个文本字符向量,比如month.name:

> month.name
[1] "January"   "February"  "March"     "April"     "May"       "June"      "July"     
[8] "August"    "September" "October"   "November"  "December" 

我应该用什么R函数来找到"0"的位置;ber";使得它返回c(-1,-1,-1、-1、-1,-1和-1,-1,7,5,6,6(形式的数字向量,即-1表示不匹配,5表示第五个字符?

这是?regexpr的确切输出(以及其他一些有用的属性(:

regexpr("ber", month.name)
# [1] -1 -1 -1 -1 -1 -1 -1 -1  7  5  6  6
#attr(,"match.length")
# [1] -1 -1 -1 -1 -1 -1 -1 -1  3  3  3  3
#attr(,"index.type")
#[1] "chars"
#attr(,"useBytes")
#[1] TRUE

您可以使用stringr::str_locate。它返回一个矩阵:

library(stringr)
str_locate(month.name, "ber")
start end
[1,]    NA  NA
[2,]    NA  NA
[3,]    NA  NA
[4,]    NA  NA
[5,]    NA  NA
[6,]    NA  NA
[7,]    NA  NA
[8,]    NA  NA
[9,]     7   9
[10,]     5   7
[11,]     6   8
[12,]     6   8

所以str_locate(month.name, "ber")[, 'start']返回一个向量:

[1] NA NA NA NA NA NA NA NA  7  5  6  6

就我个人而言,我认为NA是";没有匹配";大于-1。如果你真的想这样做的话,你可以随时替换-1。例如:

pos <- str_locate(month.name, "ber")[, 'start']
ifelse(is.na(pos), -1, pos)
[1] -1 -1 -1 -1 -1 -1 -1 -1  7  5  6  6

最新更新