我试图尝试对某人在美国参议院运行if()条件......但我得到了错误的结果,因为我无法完全匹配R.我尝试了字界限\ b和开始/结束^ $,但它似乎不起作用....而且不知道为什么?
> splits[[1]][4]
[1] "Ohio State Senate, 1979-1983"
> is.numeric(str_locate(splits[[1]][4], "\bSenator\b"))
[1] TRUE
> is.numeric(str_locate(splits[[1]][4], "/^Senator$/"))
[1] TRUE
> pattern <- "\bSenator\b"
> is.numeric(str_locate(splits[[1]][4], pattern))
[1] TRUE
基本上,上述情况都应该是假的,因为我的数据只使用参议员,如果是美国参议院,而不是州参议员。
非常感谢您的帮助!
谢谢你, 沃尔特
答案 0 :(得分:1)
该功能按预期工作,您只对返回类型感到惊讶。如果找不到匹配项,则返回NA
。更具体地说,返回NA_integer_
(取整数-2147483648的最大负值)。
x <- "Ohio State Senate, 1979-1983"
str_locate( x , "\bSenator\b")
# start end
#[1,] NA NA
#[2,] NA NA
NA_integer_
实际上是数字......
is.numeric( NA_integer_ )
#[1] TRUE
所以一切正常。请改为!all( is.na( str_locate( x , "\bSenator\b") ) )
。
答案 1 :(得分:0)
x<-"Ohio State Senate, 1979-1983"
kk<-unlist(strsplit(x," "))
kk %in% state.name
[1] TRUE FALSE FALSE FALSE
OR,
is.numeric(str_locate(x, state.name)) #If this is true, then the senator is state senator
答案 2 :(得分:0)
str_locate
的帮助文档指定它返回一个整数矩阵。在非匹配时使用该函数,它会返回NA
。
您可以针对NA进行测试:
> library(stringr)
> v <- "Ohio State Senate, 1979-1983"
> str_locate(v, "\\bSenator\\b")
start end
[1,] NA NA
> is.na(str_locate(v, "\\bSenator\\b")[,c('start')])
start
TRUE
> str_locate(v, "Senate")
start end
[1,] 12 17
> is.na(str_locate(v, "Senate")[,c('start')])
start
FALSE
就个人而言,我只是使用grep:
> grep("Senate",v)
integer(1)
> grep("Senator",v)
integer(0)
如果你想使用单词边界匹配,你需要逃避斜杠:\\b
,而不是\b
。