我有一个包含 3 列的 data.table dt:
- ID
- 名称为字符串
- 阈值为 num
一个样本是:
dt <- <- data.table(nid = c("n1","n2", "n3", "n4"), rname = c("apple", "pear", "banana", "kiwi"), maxr = c(0.5, 0.8, 0.7, 0.6))
nid | rname | maxr
n1 | apple | 0.5
n2 | pear | 0.8
n3 | banana | 0.7
n4 | kiwi | 0.6
我有第二个表 dt.ref 有 2 列:
- ID
- 名称为字符串
一个样本是:
dt.ref <- <- data.table(cid = c("c1", "c2", "c3", "c4", "c5", "c6"), cname = c("apple", "maple", "peer", "dear", "bonobo", "kiwis"))
cid | cname
c1 | apple
c2 | maple
c3 | peer
c4 | dear
c5 | bonobo
c6 | kiwis
对于dt的每个rname,我想用dt.ref的每个cname计算Levenshtein 比率:
Lr = 1 - (stringdist(cname, rname, method = "lv") / pmax(nchar(cname),nchar(rname)))
然后,我想在dt的每个rname的cname上找到 max(Lr)并获得以下 data.table 作为输出:
nid | rname | maxr | maxLr | cid
n1 | apple | 0.5 | 1 | c1
n2 | pear | 0.8 | 0.75 | c3
n2 | pear | 0.8 | 0.75 | c4
n3 | banana | 0.7 | 0.33 | c5
n4 | kiwi | 0.6 | 0.8 | c6
基本上,我们取 dt 并添加 2 列,即最大 Levenshtein 比率和相应的 cid,知道都添加了 tie,每行 1 个,对于 n2。
我使用data.table
但解决方案可以使用dplyr
或任何其他包。