【问题标题】:Extract index of a exact match string提取精确匹配字符串的索引
【发布时间】:2012-12-15 12:30:52
【问题描述】:

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

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

【问题讨论】:

  • 感谢 Jibler 把它编辑得这么好。

标签: string r match


【解决方案1】:

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

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

它将返回第一个匹配的索引。如果您有多个匹配项并想要它们的所有索引,请执行以下操作:

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

【讨论】:

    【解决方案2】:

    这是一个正则表达式方法,它使用字符串长度(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
    

    【讨论】:

      猜你喜欢
      • 2021-10-18
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多