在R中应用的一对多类型实现

在R中应用的一对多类型实现,r,foreach,apply,R,Foreach,Apply,我必须比较字符串并检查它们是否大致匹配。我的示例数据如下所示 m6 PLOT#39 H#8-2-293/A4/A/ PLOT #39 H #8-2-293/A4/A PLOT NO 1030 BUNGLOW NO PLOT NO 1030 BUNGLOW NO PLOT 1030 BUNGLOW NO 3 PLOT NO-39 H#8-2-293/A4/ GAYATRAI RESIDENCY MADHU 我将第一个字符串中的每个单词与第二个字符串中的所有单词进行比较。就这样,我写了4个循环。

我必须比较字符串并检查它们是否大致匹配。我的示例数据如下所示

m6
PLOT#39 H#8-2-293/A4/A/
PLOT #39 H #8-2-293/A4/A
PLOT NO 1030 BUNGLOW NO
PLOT NO 1030 BUNGLOW NO
PLOT 1030 BUNGLOW NO 3
PLOT NO-39 H#8-2-293/A4/
GAYATRAI RESIDENCY MADHU 
我将第一个字符串中的每个单词与第二个字符串中的所有单词进行比较。就这样,我写了4个循环。执行起来需要很长时间。我在考虑应用函数,但我不确定在这种情况下如何使用它们。因此,任何改进代码的想法都将非常有用。谢谢

    m <- strapply(m6, "(\\S+)", c)      
    for(i in 1:(length(m)-1)){      
        for(n in (i+1):(length(m))){            
            for(j in 1:length(m[[i]])){
                for(k in 1:length(m[[n]])){
                    if(length(agrep(m[[i]][j], m[[n]][k], ignore.case = TRUE))!= 0){
                        ....
                    }
                }
            }
        }
    }
m可以使用函数计算字符串之间的Levenshtein距离

e、 g:

v <- c('aaa','aab','adb','aaa','bb')
distances <- adist(v)
row.names(distances) <- v
colnames(distances) <- v

> distances
    aaa aab adb aaa bb
aaa   0   1   2   0  3
aab   1   0   1   1  2
adb   2   1   0   2  2
aaa   0   1   2   0  3
bb    3   2   2   3  0
v可以使用函数计算字符串之间的Levenshtein距离

e、 g:

v <- c('aaa','aab','adb','aaa','bb')
distances <- adist(v)
row.names(distances) <- v
colnames(distances) <- v

> distances
    aaa aab adb aaa bb
aaa   0   1   2   0  3
aab   1   0   1   1  2
adb   2   1   0   2  2
aaa   0   1   2   0  3
bb    3   2   2   3  0
v可以使用函数计算字符串之间的Levenshtein距离

e、 g:

v <- c('aaa','aab','adb','aaa','bb')
distances <- adist(v)
row.names(distances) <- v
colnames(distances) <- v

> distances
    aaa aab adb aaa bb
aaa   0   1   2   0  3
aab   1   0   1   1  2
adb   2   1   0   2  2
aaa   0   1   2   0  3
bb    3   2   2   3  0
v可以使用函数计算字符串之间的Levenshtein距离

e、 g:

v <- c('aaa','aab','adb','aaa','bb')
distances <- adist(v)
row.names(distances) <- v
colnames(distances) <- v

> distances
    aaa aab adb aaa bb
aaa   0   1   2   0  3
aab   1   0   1   1  2
adb   2   1   0   2  2
aaa   0   1   2   0  3
bb    3   2   2   3  0

v使用
agrep
的实现:

near.idx <- apply(     # Find matches
  combn(m6, 2), 2,     # compare all string combinations
  function(x) as.logical(length(agrep(x[[1]], x[[2]], 5L)))
)
apply(                 # Display matches
  combn(seq_along(m6), 2)[, near.idx], 2, 
  function(x) paste0(m6[x[[1]]], " **MATCHES** ", m6[x[[2]]])
)

agrep
在两个字符串之间进行近似匹配。您可以调整它尝试与
max.distance
和其他参数匹配的力度。另外,这里我只是选择打印内容,但是您可以存储匹配项,或者从原始向量中删除匹配项,无论什么。

使用
agrep
的实现:

near.idx <- apply(     # Find matches
  combn(m6, 2), 2,     # compare all string combinations
  function(x) as.logical(length(agrep(x[[1]], x[[2]], 5L)))
)
apply(                 # Display matches
  combn(seq_along(m6), 2)[, near.idx], 2, 
  function(x) paste0(m6[x[[1]]], " **MATCHES** ", m6[x[[2]]])
)

agrep
在两个字符串之间进行近似匹配。您可以调整它尝试与
max.distance
和其他参数匹配的力度。另外,这里我只是选择打印内容,但是您可以存储匹配项,或者从原始向量中删除匹配项,无论什么。

使用
agrep
的实现:

near.idx <- apply(     # Find matches
  combn(m6, 2), 2,     # compare all string combinations
  function(x) as.logical(length(agrep(x[[1]], x[[2]], 5L)))
)
apply(                 # Display matches
  combn(seq_along(m6), 2)[, near.idx], 2, 
  function(x) paste0(m6[x[[1]]], " **MATCHES** ", m6[x[[2]]])
)

agrep
在两个字符串之间进行近似匹配。您可以调整它尝试与
max.distance
和其他参数匹配的力度。另外,这里我只是选择打印内容,但是您可以存储匹配项,或者从原始向量中删除匹配项,无论什么。

使用
agrep
的实现:

near.idx <- apply(     # Find matches
  combn(m6, 2), 2,     # compare all string combinations
  function(x) as.logical(length(agrep(x[[1]], x[[2]], 5L)))
)
apply(                 # Display matches
  combn(seq_along(m6), 2)[, near.idx], 2, 
  function(x) paste0(m6[x[[1]]], " **MATCHES** ", m6[x[[2]]])
)

agrep
在两个字符串之间进行近似匹配。您可以调整它尝试与
max.distance
和其他参数匹配的力度。此外,这里我只是选择打印内容,但您可以存储匹配项,或从原始向量中删除匹配项,无论什么。

您能否描述一下“检查两个字符串是否大致匹配”这一步骤。。基本上检查一个字符串是否大致匹配您能否描述一下“检查两个字符串是否大致匹配”这一步骤。。基本上检查一个字符串是否大致匹配您能否描述一下“检查两个字符串是否大致匹配”这一步骤。。基本上检查一个字符串是否大致匹配您能否描述一下“检查两个字符串是否大致匹配”这一步骤。。基本上是检查字符串是否大致匹配。注意,这将计算aaa与aab,以及aab与aaa,它们是相同的,并且可以进行大量比较。是的,只要插入/删除/替换的成本保持不变,它们是相等的。无论如何,您只需使用adist('adb','aaa')计算一次从'adb'到'aaa'的距离(agrep内部基本上也是如此)。。。当然,这意味着您需要使用apply的函数来管理字符向量上的各种组合。请注意,这将计算aaa与aab,以及aab与aaa,它们是相同的,并且可以进行大量比较。是的,只要插入/删除/替换的成本保持不变,它们是相等的。无论如何,您只需使用adist('adb','aaa')计算一次从'adb'到'aaa'的距离(agrep内部基本上也是如此)。。。当然,这意味着您需要使用apply的函数来管理字符向量上的各种组合。请注意,这将计算aaa与aab,以及aab与aaa,它们是相同的,并且可以进行大量比较。是的,只要插入/删除/替换的成本保持不变,它们是相等的。无论如何,您只需使用adist('adb','aaa')计算一次从'adb'到'aaa'的距离(agrep内部基本上也是如此)。。。当然,这意味着您需要使用apply的函数来管理字符向量上的各种组合。请注意,这将计算aaa与aab,以及aab与aaa,它们是相同的,并且可以进行大量比较。是的,只要插入/删除/替换的成本保持不变,它们是相等的。无论如何,您只需使用adist('adb','aaa')计算一次从'adb'到'aaa'的距离(agrep内部基本上也是如此)。。。当然,这意味着您需要使用apply的函数来管理字符向量上的各种组合。