首页 > 解决方案 > 如何从另一个表中查找值以填充现有表列?

问题描述

我有一个名为的数据框Deals,其中一个变量是$DealYear. 这包含3 个因素(2013 年、2014 年、2015 年)。我在 Deals 中有另一列称为$GDPDeflator当前未填充。例如:

#Deals table 

DealID   DealAmt  DealYear  Name  GDPDeflator   Website
100101    200       2013     ABC        0       www.abc.com
120022    3000      2014     EFG        0       www.efg.com
300012    650       2013     HIJ        0       www.hij.com

我有一个名为 Deflator 的小表,其中包含我需要的值Deals$GDPDeflator

#Deflator table
Year   Defl
2012   1.10
2013   1.08
2014   1.055
2015   1.046
2016   1.03 

如何根据and查找Deals$GDPDeflatorfrom的值?Deflator$DeflDeals$DealYearDeflator$Year

标签: rmergematchlookup

解决方案


merge这是注释中建议的函数的典型用法。

由于您没有提供最小的可重现示例,因此我必须准备一个玩具示例。

deals.df <- data.frame(DealID = abs(rnorm(3)),
                       DealYear = c(2013,2014,2015),
                       DealAmt = abs(rnorm(3)))
deflator.df <- data.frame(Year=c(2012:2016),
                          Defl=c(1.1,1.08,1.055,1.046,1.03))

此时,您可以重命名DealYearYearin deals.df(反之亦然),或者如下所示,使用by.xandby.y来告诉merge每个数据框中列的名称

NEW.deals.df <- merge(deals.df, deflator.df, by.x = "DealYear", by.y = "Year")

NEW.deals.df

输出

  DealYear    DealID   DealAmt  Defl
1     2013 2.4428505 0.8423267 1.080
2     2014 0.7864217 1.7308812 1.055
3     2015 1.2319621 0.7857849 1.046

现在,您可以根据需要重新排列列。

请注意,您可以使用by=c("colname1","colname2",...).


推荐阅读