説明
マージする必要がある情報を含む 2 つのデータセットがあります。私が持っている唯一の共通フィールドは、完全に一致しない文字列と、実質的に異なる可能性がある数値フィールドです
問題を説明する唯一の方法は、データを示すことです。ここにa.csvとb.csvがあります。BをAにマージしようとしています。
B には 3 つのフィールドがあり、A には 4 つのフィールドがあります。会社名 (ファイル A のみ)、ファンド名、資産クラス、および資産です。これまでのところ、私の焦点は、単語または文字列の一部を置き換えて完全に一致するものを作成し、次に使用することによってファンド名を一致させることでした。
a <- read.table(file = "http://bertelsen.ca/R/a.csv",header=TRUE, sep=",", na.strings=F, strip.white=T, blank.lines.skip=F, stringsAsFactors=T)
b <- read.table(file = "http://bertelsen.ca/R/b.csv",header=TRUE, sep=",", na.strings=F, strip.white=T, blank.lines.skip=F, stringsAsFactors=T)
merge(a,b, by="Fund.Name")
ただし、これでは約 30% の一致しか得られません。残りは私が手作業で行う必要があります。
資産は数値フィールドであり、どちらも常に正しいとは限らず、ファンドの資産が少ない場合は大幅に変動する可能性があります。資産クラスは、両方のファイルで「一般的に」同じ文字列フィールドですが、相違点があります。
複雑さを増しているのは、ファイル B のさまざまな一連の資金です。たとえば、次のようになります。
AGF カナディアン バリュー
AGF カナディアン バリュー-D
この場合、シリーズ化されていないものを選ぶか、「A」「-A」「Advisor」などと呼ばれるものをマッチとして選ばなければなりません。
質問
最善のアプローチは何だと思いますか? この演習は毎月行う必要があり、手動で一致させるには非常に時間がかかります。コードの例は役に立ちます。
アイデア
私がうまくいくと思う方法の 1 つは、文字列内の各単語の最初の大文字に基づいて文字列を正規化することです。しかし、Rを使用してそれを実現する方法を理解できませんでした.
私が検討したもう 1 つの方法は、資産、ファンド名、資産クラス、および会社の組み合わせに基づいて一致のインデックスを作成することでした。しかし、繰り返しになりますが、Rでこれを行う方法がわかりません。または、それが可能かどうかさえわかりません。
コードの例、コメント、考え、方向性は大歓迎です!