提取完全匹配字符串的索引

时间:2012-12-15 12:30:53

标签: string r match

我尝试了这个,但这又需要一个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

但是获取逻辑向量只需要一个单个索引,谢谢。

2 个答案:

答案 0 :(得分:2)

如果您想要完全匹配,请使用match

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

它将返回第一场比赛的索引。如果您有多个匹配并想要所有索引,请执行:

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

答案 1 :(得分:0)

这是一个正则表达式方法,它使用字符串长度(nchar和/或nzchar)来返回所有完全匹配的索引。仅对于第一场比赛,只需将[1]添加到下方which(...)来电的末尾(即which(...)[1])。

假设c.namescolnames(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