【问题标题】:How do I lookup a value from another table to populate existing table column?如何从另一个表中查找值以填充现有表列?
【发布时间】:2020-01-15 11:40:40
【问题描述】:

我有一个名为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 

如何根据Deals$DealYearDeflator$YearDeflator$Defl 中查找Deals$GDPDeflator 的值?

【问题讨论】:

标签: r merge match lookup


【解决方案1】:

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

由于您没有提供minimal reproducible example,所以我必须准备一个玩具示例。

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))

此时您可以将deals.df 中的DealYear 重命名为Year(反之亦然),或者如下所示,使用by.xby.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",...) 匹配具有多个列作为标识符的数据框之间的行。

【讨论】:

  • 感谢这帮了大忙。实际上,我不得不对其进行调整,因为尽管您的代码有效,但它不适用于我的实际数据框和变量。我通过输入merge( x= deals, y= deflator....etc) 而不是merge(deals.df, deflator.df) 对其进行了更改。由于某种原因,后者不起作用。
  • 有趣,因为您没有添加 MWE,所以我必须自己制作。无论如何很高兴它有帮助。如果此答案对您有所帮助,您可能想要投票和/或标记为已回答。
猜你喜欢
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 2022-08-18
  • 1970-01-01
  • 2015-02-07
  • 2013-12-10
  • 2023-03-21
相关资源
最近更新 更多