【问题标题】:How to calculate the number of matching positions among two strings?如何计算两个字符串之间的匹配位置数?
【发布时间】:2020-06-02 02:23:40
【问题描述】:

我有两个向量,每个单元格中都有字符。

Ex:       Vet 1.     Vet 2. 

Row 1.    AAABBC     BCABDE 

Row 2.    EDAACD     ADBBEE

...         ...        ...

Row n.    CCCDAC     EECEAC         

比较同一行中的字符,例如 AAABBC 和 BCABDE,我们在同一位置有两个匹配项(A - 第 3 个位置 - 和 B - 第 4 位)。 我想为同一行中的字符创建第三个向量(Vet 3),其中包含 Vet 1 和 Vet 2 之间的匹配数。

输出

         Vet. 3

Row 1.     2

Row 2.     1

...      ...

Row n.     3

我不知道该怎么做。有人可以帮我吗?

【问题讨论】:

标签: r match character


【解决方案1】:

我们可以拆分两列中的每个字符并计算其中有多少匹配。如果两列中的字符数不相同,我们可以使用唯一的最小字符数进行比较。

假设df 是您的数据框名称,col1col2 是列名称。

mapply(function(x, y) {
   len <- min(length(x), length(y))
   sum(x[1:len] == y[1:len])
}, strsplit(df$col1, ''), strsplit(df$col2, ''))

#[1] 2 1 3

如果我们保证两列中的字符数相同,我们可以简化这一点:

mapply(function(x, y) sum(x == y), strsplit(df$col1, ''), strsplit(df$col2, ''))

数据

df <- structure(list(col1 = c("AAABBC", "EDAACD", "CCCDAC"), col2 = c("BCABDE", 
"ADBBEE", "EECEAC")), class = "data.frame", row.names = c(NA, -3L))

【讨论】:

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