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

我只想要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和/或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 回答