R - 来自data.frame的Vlookup元素与来自另一个data.frame

时间:2018-01-13 22:20:45

标签: r ggplot2 vlookup

也许这是一个简单的问题,但通常会发生其他语言中的简单事情在R中变得不那么容易。我试过,但我找不到解决方案。任何人都可以帮我这个吗?

我有一个数据框,可能是:

产品价格1 A 2017-01-31 10.000
A 2017-02-28 12.800
A 2017-03-31 15.300
B 2017-01-31 11.000
B 2017-02-28 12.000
B 2017-03-31 12.200
C 2017-01-31 11.000
C 2017-02-28 11.600
C 2017-03-31 12.000

和另一个,可能是这样的:

时间EUR_USD_Rate
2017-01-31 1.200
2017-02-28 1.214
2017-03-31 1.216

我想根据TIME率将每个Price1除以每个EUR_USD_Rate。

我不想合并data.frames。

我想在一个闪亮的应用程序中应用它。我希望它绘制一个离散图,其中Price1除以de EUR / USD Rate。所以我只想打电话给欧元/美元汇率告诉ggplot2将Price1除以EUR / USD。有人能帮帮我吗?提前谢谢!

3 个答案:

答案 0 :(得分:0)

你说你不想合并数据框......但是通过在将数据集提供给<div id="header"> this is my header</div>

之前更改数据集来做到这一点就可以得到一个非常简单的解决方案。
ggplot

答案 1 :(得分:0)

大卫,我经常遇到同样的问题,因为我最初来自.net / sql背景。这就是为什么我倾向于完成我认为你要求的东西。如果我理解正确的话,dfFinal中的最后一列应该是你需要的。

c1=c('A','A','A','B','B','B','C','C','C');
c2=c('2017-01-31','2017-02-28','2017-03-31','2017-01-31','2017-02-28','2017-03-31','2017-01-31','2017-02-28','2017-03-31');
c3=c(10.000,12.800,15.300,11.000,12.000,12.200,11.000,11.600,12.000);
df1 = data.frame(Prod=c1, Time=c2, Price=c3);df1;
df2 = data.frame(Time=c('2017-01-31', '2017-02-28', '2017-03-31'), EUR_USD_Rate=c(1.200, 1.214, 1.216));df2;

library(sqldf);
dfFinal = sqldf("
        select 
          d1.* 
          ,d2.EUR_USD_Rate
          ,d1.Price/d2.EUR_USD_Rate as RESULT
        from 
          df1 d1
          left join df2 d2
            on d1.Time = d2.Time
  ");
dfFinal;

答案 2 :(得分:0)

你在R中最接近的vlookup将是match

要查找特定日期的转化率,您可以

df2$EUR_USD_Rate[match(df1$Time,df2$Time)]

可以解释为:找到我可以在向量df1$Time中找到df2$Time的索引,并将其用于df2$EUR_USD_Rate的子集。

因此您可以使用以下声明调整价格:

df1$Price_adjusted = df1$Price/df2$EUR_USD_Rate[match(df1$Time,df2$Time)]

输出(使用Austin Springer提供的数据):

  Prod       Time Price Price_adjusted
1    A 2017-01-31  10.0       8.333333
2    A 2017-02-28  12.8      10.543657
3    A 2017-03-31  15.3      12.582237
4    B 2017-01-31  11.0       9.166667
5    B 2017-02-28  12.0       9.884679
6    B 2017-03-31  12.2      10.032895
7    C 2017-01-31  11.0       9.166667
8    C 2017-02-28  11.6       9.555189
9    C 2017-03-31  12.0       9.868421

希望这有帮助!