【问题标题】:Dealing with multiple matches in adist在 adist 中处理多个匹配项
【发布时间】:2014-06-17 15:54:16
【问题描述】:

我想计算在字符串中匹配字符之前插入的字符数。我从adist() 函数输出中提取"trafos" 属性以返回转换字符串。当我感兴趣的角色只有一个实例时,这很好用。例如,

attr(adist("r","world",counts=T),"trafos")

返回

     [,1]   
[1,] "IIMII"

因此计算“M”之前的“I”的数量会给我我的答案:2

但是,当有多个实例时,该函数出于某种原因只返回最终实例的匹配项。例如,

attr(adist("r","barry",counts=T),"trafos")

返回

     [,1]   
[1,] "IIIMI"

有什么方法可以让adist() 返回“IIMMI”或至少返回“IIMII”?也许我需要打开另一个功能或选项?我应该考虑酿造自己的功能吗?

感谢您的帮助

【问题讨论】:

    标签: regex r string-matching


    【解决方案1】:

    这不是一个特别优雅的解决方案,但它可能已经足够了。

    试试

    parts <- strsplit("barry", "r")[[1]]

    nchar(parts[1])

    编辑: 我把它放在一个函数中。

    nchar.before = function(before, string)
    {
      parts = strsplit(string, before)
    
      return(as.numeric(lapply(parts, function(v) nchar(v[1]))))  
    }
    

    示例:

    strings = c("rabc", "abcr", "abcrabcr", "abcabc")
    nchar.before(before = "r", string = strings)
    

    输出:0 3 3 6 请注意,如果“r”不在其中,它如何输出字符串的整个长度。您可以轻松修改它以生成 NA 或其他内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      相关资源
      最近更新 更多