2

我试图以某人在美国参议院为条件运行 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

基本上,以上都应该是错误的,因为我的数据只使用参议员,如果它是美国参议院,而不是州参议院。

非常感谢您的帮助!

谢谢你,沃尔特

4

3 回答 3

1

该函数按预期工作,您只是对返回类型感到惊讶。如果没有找到匹配项,则NA返回。更具体地说,NA_integer_返回 an(取整数 -2147483648 的最大负值)。

x <- "Ohio State Senate, 1979-1983"
str_locate( x , "\bSenator\b")
#     start end
#[1,]    NA  NA
#[2,]    NA  NA

而anNA_integer_实际上是一个数字......

is.numeric( NA_integer_ )
#[1] TRUE

所以一切正常。试试!all( is.na( str_locate( x , "\bSenator\b") ) )吧。

于 2013-11-08T23:25:27.940 回答
1
x<-"Ohio State Senate, 1979-1983"
kk<-unlist(strsplit(x," "))
kk %in% state.name
[1]  TRUE FALSE FALSE FALSE

或者,

is.numeric(str_locate(x, state.name)) #If this is true, then the senator is state senator
于 2013-11-08T23:30:49.687 回答
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

于 2013-11-08T23:32:52.167 回答