DF2に基づいてDF1にインデックスを作成しようとしています。 DF2にはIDという名前の列があります.DF1 $ Nameを検索し、DF2 $ Wineの値が入っていればDF2 $ IDからDF1 $ IDにIDを入力します。別のデータフレームに基づいてデータフレームにインデックスを作成する方法R
DF1 = allwines
a <- c("Malbec", "Syrah", "Cabernet Sauvignon", "Merlot")
b <- c(1, 2, 3, 4)
allwines <- data.frame(a, b)
> allwines
a b
1 Malbec 1
2 Syrah 2
3 Cabernet Sauvignon 3
4 Merlot 4
DF2 =ワイン
c <- c("Charles Smith", "K Vintners", "K Vintners", "Two Vintners", "K Vintners", "Kerloo", "Betz Family", "Efeste")
d <- c("Royal City Syrah", "Cattle King Syrah", "Klein Syrah", "Make Haste Cinsault", "The Hidden Syrah", "Stone Tree Malbec", "Le Parrain Cabernet Sauvignon", "Big Papa Cabernet Sauvignon")
wines <- data.frame(c, d)
> wines
c d
1 Charles Smith Royal City Syrah
2 K Vintners Cattle King Syrah
3 K Vintners Klein Syrah
4 Two Vintners Make Haste Cinsault
5 K Vintners The Hidden Syrah
6 Kerloo Stone Tree Malbec
7 Betz Family Le Parrain Cabernet Sauvignon
8 Efeste Big Papa Cabernet Sauvignon
所望の出力
> desired
c d ID
1 Charles Smith Royal City Syrah 2
2 K Vintners Cattle King Syrah 2
3 K Vintners Klein Syrah 2
4 Two Vintners Make Haste Cinsault NA
5 K Vintners The Hidden Syrah 2
6 Kerloo Stone Tree Malbec 1
7 Betz Family Le Parrain Cabernet Sauvignon 3
8 Efeste Big Papa Cabernet Sauvignon 3
私の試みはわずかNAの完全なID列を生成してきました。 アイデアは、ワインの列にあるワインの名前を検索して、すべてのワインのワインと一致させることです。たとえば、オールワインのシラーはRoyal City Syrah、Cattle King Syrah、Klein Syrahとワインを合わせます$
あなたのデータで、 'sum(unique(df1 $ Name)%in%unique(df2 $ Wine))'はゼロを与えます。したがって、結合/マージするための一致する行を見つけることは期待されていません。代わりに、 'intersect(unique(df1 $ Name)、unique(df2 $ Wine))'は空ベクトルを与えます。 – Gopala
'DF2 $ Wine'のいくつかが' DF1 $ Name'sと実際に一致するようにデータフレームを変更できますか? – rawr
'idx < - sapply(DF2 $ Wine、function(x)DF1 $ Name [grep(x、DF1 $ Name、ignore.case = TRUE)]);を試してみてください。 DF1 $ ID < - DF2 $ ID [一致(名前(idx [match(DF1 $ Name、idx)])、DF2 $ Wine)] 'おそらく。私はいくつかのテストケースを作ったが、それは大丈夫だと思われる。 – rawr