R:regexpr()如何在模式参数中使用向量

R:regexpr()如何在模式参数中使用向量,r,regex,vector,vectorization,tm,R,Regex,Vector,Vectorization,Tm,我想从一本短文词典中了解术语的位置。问题出在下面代码的最后几行,这些代码大致基于 我知道pattern=paste(vector,collapse=“|”)的解决方案,但我的向量可能很长(所有常用名称) 这个命令是否有一个简单的矢量化版本,或者是否有一个解决方案可以为每一行接受一个新的模式参数 您可以使用以下方法对regexpr进行矢量化: mapply是sapply的多变量版本mapply将乐趣应用于每个。。。参数、第二个元素、第三个元素等等 使用 结果: Nam

我想从一本短文词典中了解术语的位置。问题出在下面代码的最后几行,这些代码大致基于

我知道pattern=paste(vector,collapse=“|”)的解决方案,但我的向量可能很长(所有常用名称)


这个命令是否有一个简单的矢量化版本,或者是否有一个解决方案可以为每一行接受一个新的模式参数

您可以使用以下方法对
regexpr
进行矢量化:

mapply
sapply
的多变量版本
mapply
将乐趣应用于每个。。。参数、第二个元素、第三个元素等等

使用

结果:

               Name Segment          Content Postion
roy             roy       3        Roy Batty       1
sebastian sebastian       7   J.F. Sebastian       6
harry         harry       8     Harry Bryant       1
dave           dave      10     Holden, Dave       9
leon           leon      11    Leon Kowalski       1
tyrell       tyrell      12 Dr. Eldon Tyrell      11
或者,使用stringr:

字符串和模式上的矢量化

它返回:

对于
stru\u locate
,一个整数矩阵。第一列给出匹配的开始位置,第二列给出结束位置

使用


请注意,如果需要将字符串与fixed(即非正则表达式模式)匹配,则使用该选项。否则,请删除
fixed()
fixed=TRUE

也许您需要
stringr::str\u locate(tolower(pkd.names.quotes[tdm$j])、rownames(tdm)[tdm$i])[,1]
。检查
stringr
包(和
stringi
包),它提供基本相同的
regex
基函数,但更快、更矢量化。@nicola它可以工作。请注意,
stringr
regex风格是ICU,它与TRE(默认的基本regex引擎)有很大不同,也与PCRE(
perl=TRUE
)引擎有很大不同。顺便说一句,如果搜索的字符串是固定字符串,我建议
stru locate(tolower(pkd.names.quotes[tdm$j]),fixed(rownames(tdm)[tdm$I])[,1]
Dave在
firstnames
中重复。事情可能会变得一团糟?@amonk:也许,下一行可以解决这个问题-
dict非常感谢!我开始尝试stringr::str_locate,并取得了一些好的结果,但我还不擅长应用函数族。祝你下午愉快!
       Name Segment          Content Postion
1       roy       3        Roy Batty       1
2 sebastian       7   J.F. Sebastian      -1
3     harry       8     Harry Bryant      -1
4      dave      10     Holden, Dave      -1
5      leon      11    Leon Kowalski      -1
6    tyrell      12 Dr. Eldon Tyrell      -1

Warning message:
In regexpr(pattern = rownames(tdm)[tdm$i], text = tolower(pkd.names.quotes[tdm$j])) :
  argument 'pattern' has length > 1 and only the first element will be used
data.frame(
  Name      = rownames(tdm)[tdm$i],
  Segment = colnames(tdm)[tdm$j],
  Content = pkd.names.quotes[tdm$j],
  Postion = mapply(regexpr, rownames(tdm)[tdm$i], tolower(pkd.names.quotes[tdm$j]), fixed=TRUE)
)
               Name Segment          Content Postion
roy             roy       3        Roy Batty       1
sebastian sebastian       7   J.F. Sebastian       6
harry         harry       8     Harry Bryant       1
dave           dave      10     Holden, Dave       9
leon           leon      11    Leon Kowalski       1
tyrell       tyrell      12 Dr. Eldon Tyrell      11
str_locate(tolower(pkd.names.quotes[tdm$j]), fixed(rownames(tdm)[tdm$i]))[,1]