問題タブ [stringdist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 変数内の名前を連続的に agrep し、最も近い名前で新しい変数を作成
名前がさまざまな形式である会社名の文字ベクトルを想定します。これは、10,000 行のデータ フレームの小さなバージョンです。目的の 2 番目のベクトル ("two.names") が表示されます。
ベクトルが会社名のアルファベット順にソートされていると仮定します (これにより、最も短いバージョンが最初に表示されると思います)。agrep()最初の会社名から始めて、それを 2 番目の会社名と一致させ、そして (ほぼ一致すると仮定して) 最初の会社名を両方の新しい列 (short.name) に追加するにはどうすればよいでしょうか。次に、それを 3 番目の要素と一致させます。すべての Carlson バリエーションが一致します。
R が最初の Carmody に遭遇したときのように、十分な一致がない場合は、最初からやり直して次の要素に一致し、次の不一致まで繰り返します。
連続する企業間に一致がない場合、R は一致が見つかるまで続行する必要があります。
この質問に対する答えは、ベクトル全体と年ごとのグループに対してファジー マッチングを使用します。 名前のあいまい一致によって一意の ID を作成します (R を使用した agrep 経由) 。しかし、私の問題を解決するコードの一部を提供しているようです。この質問ではstringdist(). 文字列距離
編集:
以下、オブジェクトmatchesは一致を示すリストですが、R に「最初の一致を取り、次の一致があればその名前に変換し、その名前を新しい変数列に入れる」ように指示するコードがわかりません。 "
r - Rのデータフレームで同様の行(重複ではない)を見つける
> 800k 行のデータセットがあります (例):
フィールド ID は一意の ID です。フィールド codeA と codeB は同じでなければなりませんが、フィールド fieldA と fieldB にはレーベンシュタイン距離または同様の関数が必要です。それに基づいて、どの行が非常に似ているかを見つける必要があります。出力は、次の行にある可能性があります。
コード A とコード B のような 2 つの制約がある場合、このような大きなデータセットの距離行列は機能せず、あまり意味がありません。1つのアプローチは、codeA-codeBで分割するplyr関数になると思いますが、その後行き詰まっています
明確にするために、fieldAとfieldB の両方で類似性が高く、codeAとcodeB で完全に一致するすべての行をグループ化したいと考えています。
編集:
David DeWert のアイデアに従って、この行に沿った何かが各 codeA-codeB グループで機能するように見えます。
ここで、データフレームを codeA-codeB グループに分割し、この関数をそれらに適用する方法を見つける必要があります。
EDIT2:
以前の関数クラスタリングと plyr パッケージを使用して、これに対して「十分な」アプローチを管理しました。
これにより、次のような「codeA、codeBによるグループ」のそれぞれを含むリストが作成されます。
これは、codeA と codeB によって作成されたグループを fieldA と fieldB で効果的にクラスター化します。これで目的の出力が得られませんが、より良い解決策が得られないため、やらなければなりません。これに対する私の最大の不満は、plyr 関数の性質上、グループごとに複数の行を取得できないことです (これは完全に理にかなっています)。そのため、データフレームの代わりにリストを結果として使用する必要があります。問題は、データセットが非常に大きく (このように)、plyr がうまく機能しない場合に発生します...そして代替の dplyr パッケージはリストの結果と互換性がありません...まあ。
r - 2 つの文字列がほぼ同じかどうかを確認する方法はありますか?
次の 2 つの文字列を考えてみましょう: applesauce と apple-sauce . これらは同じオブジェクトを参照しています。したがって、これら 2 つの名前を含むレコードは重複と見なされます。ただし、R では、これらは別のレベルと見なされます。編集距離を使用して、これら 2 つの名前が stringdist パッケージを使用している程度を定量化できますか?
r - stringdist パッケージを使用した、空白を含む変数の文字列マッチング
データセット内の文字列をジャロ距離と一致させようとしています。問題は、空白を含む文字列を一致として取得していることです。データは次のとおりです。
空白の一致を処理する方法はありますか? このような出力を期待しています。
r - R - stringdist コスト設定エラー
で運用コストを設定しようとするとエラーが発生します
理由はありますか?
これは完全に機能します(レーベンシュタイン距離)
コストを設定したい場合(インデルの2倍代入)
このエラーがあります
r - R: stringdist と stringdistmatrix で近似一致のリストを作成する
優れたパッケージ「stringdist」を発見し、それを使用して文字列の距離を計算したいと考えています。特に、一連の単語があり、「ほぼ一致」がレーベンシュタイン距離のようなアルゴリズムを介して行われるほぼ一致を出力したいと考えています。
シェル スクリプトのコードが非常に遅く、stringdist を読み込んでメトリックを含むマトリックスを生成することができました。ここで、そのマトリックスを、ほぼ一致するもののみを持つ小さなマトリックスに煮詰めたいと思います。たとえば、メトリックがゼロではなく、しきい値よりも小さい場合です。
OK、これで (大きな) dist ができました。出力が次のようになるリストに戻すにはどうすればよいですか?
メトリックが非ゼロで n=5 未満の場合のみ? テストを実行できる「apply()」を見つけたので、その使用方法を整理する必要があります。
問題は stringdist と stringdistmatrix に固有のものではなく、非常に初歩的な R ですが、それでも行き詰まっています。答えにはsubset()が含まれていると思いますが、「dist」を別のものに変換する方法がわかりません。