如何基于R中的另一个数据框在数据框中创建索引

时间:2016-04-24 21:27:13

标签: r indexing dataframe

我正在尝试基于DF2在DF1中创建索引。在DF2中,我有一个名为ID的列,我想要做的是搜索DF1 $ Name,如果它包含来自DF2 $ Wine的值,则填写从DF2 $ ID到DF1 $ ID的ID。

DF1 = allwines

function getRandomColor(){
  return Math.round(Math.random()) ? 'red' : 'black';
}

DF2 =葡萄酒

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

期望输出

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

我的尝试刚刚生成了一个充满NA的ID行。 我们的想法是搜索葡萄酒行中的葡萄酒名称,并将它们与来自所有葡萄酒的葡萄酒相匹配,例如来自所有葡萄酒的西拉(Syrah),以及葡萄酒中的皇家城市西拉,牛王西拉和克莱因西拉。$ d

1 个答案:

答案 0 :(得分:0)

如果名称恰好在df2 $ Wine和df1 $ Name之间匹配,您只需加入这些列即可获得所需内容。

在创建所有NA的列表之前,请尝试以下操作:

library(dplyr)
newdf <- left_join(df1, df2, by = c('Name', 'Wine'))

newdf现在应该包含来自df1的所有原始行,以及相应的ID(如果在df2中找到它。)

当然,这是假设所有内容都格式正确并且名称匹配。