2012-12-15 110 views
0

我試過這個,但是這將再次需要for -loop來比較,所以任何更好的方法來找到索引。精確匹配字符串的提取索引

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." 

我只希望爲指標,是指字符串的確切長度或者是有一個更好的方法來提取相同長度的相似字符串。

我也用

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 

但要邏輯向量只想單一指標,謝謝。

+0

感謝Jibler編輯這麼好聽。 – Aashu

回答

2

如果你想完全匹配,使用match

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

它會返回第一個匹配的索引。如果您有多個比賽,希望自己的各項指標,這樣做:

which(str[[1]][1] == colnames(log_data)[2:ncol(log_data)]) 
+0

非常感謝你的幫忙。 – Aashu

0

下面是一個使用字符串長度(nchar和/或nzchar)返回索引的所有精確匹配正則表達式的方法。僅適用於第一場比賽,只需在which(...)以下電話(即which(...)[1])的末尾追加[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