2

私は誰かが米国上院にいることを条件に if() を実行しようとしましたが、R で正確に一致させることができないため、間違った結果が得られました。しかし、それはうまくいかないようです....なぜだかわかりませんか?

> 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

基本的に、私のデータは州上院ではなく米国上院である場合にのみ上院議員を使用するため、上記はすべて false になるはずです。

あなたの助けは大歓迎です!

ありがとう、ウォルター

4

3 に答える 3

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 に答える
1

関数は期待どおりに機能します。戻り値の型に驚くだけです。一致が見つからない場合は、NAが返されます。より具体的には、NA_integer_が返されます (整数 -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 に答える
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 に答える