我有一个文本字符向量,比如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