【问题标题】:get length of character matching between two string in R获取R中两个字符串之间的字符匹配长度
【发布时间】:2018-08-17 19:35:58
【问题描述】:

我有一个数据框,我需要在其中比较两列并找到两个元素之间匹配字符的数量。

例如:x 和 y 是要比较的两个元素,如下所示:

x<- "1/2"
y<-"2/3"

我没有列出它们,并用“/”将它们分开,如下所示:

unlist(strsplit(x,"/"))->a
unlist(strsplit(y,"/"))->b

然后我使用了pmatch:

pmatch(a,b,nomatch =0)
[1] 0 1

使用 sum() 知道有多少个字符匹配:

sum(pmatch(a,b,nomatch =0))
[1] 1

但是,当以其他方式进行比较时:

 pmatch(b,a,nomatch = 0)
 [1] 2 0

既然两个字符串之间只有一个匹配,为什么它显示2。可能是索引。但是我需要得到字符串之间有多少个字符是相同的,而不管比较 a vs b 或 b vs a。

有人可以帮助如何获得这个。

【问题讨论】:

  • 阅读?pmatch,特别是返回值——它是一个整数向量,给出了表中匹配的元素的索引。所以不要求和,试试length(pmatch(a,b))
  • 也许:length(intersect(a, b))

标签: r string string-comparison


【解决方案1】:

根据?pmatchpmatch 在第二个参数的元素中寻找匹配它的第一个参数的元素。

例如,第一个列表中的“2”匹配第二个列表中的第二个元素。

> pmatch(c("2", "1"),c("3","2"),nomatch =0)
# [1] 2 0

了解匹配的元素数量的一种方法是对非零元素求和:

sum(pmatch(c("2", "1"),c("3","2"),nomatch =0) != 0)
# [1] 1

【讨论】:

    【解决方案2】:

    两个

    sum(pmatch(b, a, nomatch = 0) != 0)    # 1
    sum(pmatch(a, b, nomatch = 0) != 0)    # 1
    

    返回相同的值。

    【讨论】:

      【解决方案3】:

      另一种选择可能是

      sum(b %in% a)
      [1] 1
      sum(a %in% b)
      [1] 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        • 2018-07-28
        • 1970-01-01
        相关资源
        最近更新 更多