1

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の各rnamecnameで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または他のパッケージを使用できます。

4

1 に答える 1