【问题标题】:how to get percentage character match between two strings using sqldf in R如何在R中使用sqldf获取两个字符串之间的百分比字符匹配
【发布时间】:2019-07-21 21:44:44
【问题描述】:

我想在我的数据框中获得由名称组成的两个字符串/两列之间的百分比字符匹配。 如果下面可以使用 sqldf 实现,那将很有帮助。 下面是我想在我的数据框的一列中实现的示例。

FAYE 与 FAYE2 的对比

输出将是 90%

下面要使用的公式:

总字符数(加上第一个和第二个字符串的长度)= 9 匹配字符乘以 2 除以总字符 = (4 x 2) / 9 *** 我们将匹配的字符乘以 2,因为有 2 个字符串 8/9 = 88.88 % 或 90%

谢谢

【问题讨论】:

  • 如果一个字符在一个或两个字符串中出现多次会怎样?
  • 我们也需要计算一下

标签: r dataframe percentage


【解决方案1】:

我们从问题中的示例假设我们要确定第一个字符串是第二个字符串的子字符串还是反之亦然,如果是,则报告它们的长度比,否则报告 0。此外,示例中的长度比率是 100 * 4 / 5 = 80%,而不是问题中所示的 90%。

# test data
DF <- data.frame(string1 = c("FAYE", "FAYE2", "X"), 
                 string2 = c("FAYE2", "FAYE", "FAYE"), stringsAsFactors = FALSE)

library(sqldf)

sqldf("select *, 
  max(100.0 * (instr(string2, string1) > 0) * length(string1) / length(string2),
      100.0 * (instr(string1, string2) > 0) * length(string2) / length(string1))
      percent from DF")

给予:

  string1 string2 percent
1    FAYE   FAYE2      80
2   FAYE2    FAYE      80
3       X    FAYE       0

【讨论】:

  • 感谢您的代码。但是我被要求使用以下公式来计算百分比:总字符(添加第一个和第二个字符串的长度)= 9 匹配字符乘以 2 除以总字符 = (4 x 2) / 9 *** 我们相乘匹配字符乘以 2,因为有 2 个字符串 8/9 = 88.88 % 或 90%
  • 如果我比较 string1="DUCK THRU" 和 string2="JERNIGAN OIL CO., INC."它给了我 0%,但它不应该是。两个字符串之间匹配的字符很少
猜你喜欢
  • 2012-08-23
  • 2019-07-07
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
相关资源
最近更新 更多