3列のdata.table dtがあります:
- ID
- 文字列としての名前
- 数値としてのしきい値
サンプルは次のとおりです。
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
2 つの列を持つ 2 番目のテーブル dt.ref があります。
- 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を使用してレーベンシュタイン比を計算したいと思います。
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 を取り、最大レーベンシュタイン比と対応する cid の 2 つの列を追加します。n2 のように 1 行に 1 つずつ同数がすべて追加されることがわかっています。
私は使用しますdata.tableが、ソリューションはdplyrまたは他のパッケージを使用できます。