0

私はこれを試しましたが、for比較するために再びループが必要になるため、インデックスを見つけるためのより良い方法があります。

str[[1]][1]  
"NYA.FWD.AMGM.MON..MAXRUNALARM."
m<-grep( str[[1]][1] , colnames(log_data)[2:ncol(log_data)] , value=FALSE)
m
[1] 5 6

どこ

colnames(log_data)[6]
"NYA.FWD.AMGM.MON..MAXRUNALARM....SU."
colnames(log_data)[7]
"NYA.FWD.AMGM.MON..MAXRUNALARM."

インデックスとして6のみが必要です。つまり、文字列の正確な長さを意味するか、同じ長さの同様の文字列を抽出するより良い方法があります。

私も使った

str_detect((colnames(log_data)[2:ncol(log_data)]),fixed(str[[1]][1]))
[1] FALSE FALSE FALSE FALSE  **TRUE  TRUE** FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

しかし、論理ベクトルを取得するには、単一のインデックスが必要です、ありがとう。

4

2 に答える 2

2

完全一致が必要な場合は、次を使用しますmatch

match(str[[1]][1], colnames(log_data)[2:ncol(log_data)])

最初に一致したインデックスを返します。複数の一致があり、すべてのインデックスが必要な場合は、次のようにします。

which(str[[1]][1] == colnames(log_data)[2:ncol(log_data)])
于 2012-12-15T12:59:23.960 に答える
0

nchar文字列の長さ ( and/or nzchar) を使用してすべての完全一致のインデックスを返す正規表現メソッドを次に示します。[1]最初の一致のみ、以下の呼び出しの最後に追加しwhich(...)ます (つまりwhich(...)[1])。

c.namesからの結果であると仮定しcolnames(log_data)ます。

> s <- "NYA.FWD.AMGM.MON..MAXRUNALARM."
> c.names <- c("NYA.FWD.AMGM.MON..MAXRUNALARM....SU.", 
               "NYA.FWD.AMGM.MON..MAXRUNALARM.",
               "NYA.FWD.AMGM.MON..MAXRUNALARM..D.",
               "..NYA.FWD.AMGM.MON..MAXRUNALARM.",
               "NYA.FWD.AMGM.MON..MAXRUNALARM.")

最初の一致のみ:

> which(!nzchar(gsub(s, '', c.names)))[1]
## [1] 2

すべての試合:

> which(!nzchar(gsub(s, '', c.names)))
## [1] 2 5
于 2014-05-10T16:59:08.517 に答える