根据日期

时间:2018-05-24 08:42:30

标签: r

我有以下表格:

test<- read.table(text = "        var1 var2 var3 var4
                  1 12/12/2017  CAD   10    3
                  2 20/02/2018  CAD   30    8
                  3 14/03/2016  USD   44    9
                  4 10/05/2000  KOR   56   11
                  5 04/04/2016  GBP   45   22")

test2 <- read.table(text = "        date USD CAD KOR GBP
1 12/12/2017   1   2 0.1   2
2 20/02/2018   2   1 0.8   1
3 14/03/2016   3   4 1.0   4
4 10/05/2000   4   5 0.6   5
5 04/04/2016   5   1 1.0   1")

我想将test$var3test$var4的值与test2表中的相应值相乘,具体取决于日期。例如,如果test$var2是CAD且test$var1是12/12/2017,则应查看表test2以查找该日期的CAD即期汇率并将其乘以{{ 1}}和test$var3

有办法吗?

2 个答案:

答案 0 :(得分:2)

我们可以使用mapply上的var1var2的{​​{1}}分别过滤test的行和列,以获取该特定货币的即期汇率在那一天。获得test2后,我们可以将其乘以spot_ratevar3

var4

我们也可以spot_rate = mapply(function(x, y) test2[x == test2$date, y == names(test2)], test$var1, test$var2) spot_rate #[1] 2.0 1.0 3.0 0.6 1.0 test$var3 * spot_rate #[1] 20.0 30.0 132.0 33.6 45.0 test$var4 * spot_rate #[1] 6.0 8.0 27.0 6.6 22.0 使用spot_rate或多或少相同的操作。{/ p>

match

答案 1 :(得分:0)

如果您希望在data.frame中使用货币值而不查看,则可以在以长格式转换test2之后将表连接在一起。

如果您只是想查找,Ronak Shah的答案非常有效。

library(dplyr)
library(tidyr)

test %>% 
  inner_join((test2 %>% gather(key = "currency", value = "curency_value", -date)), by = c("var1" = "date", "var2" = "currency") ) %>% 
  mutate(var3 = var3 * curency_value,
         var4 = var4 * curency_value)

        var1 var2  var3 var4 curency_value
1 12/12/2017  CAD  20.0  6.0           2.0
2 20/02/2018  CAD  30.0  8.0           1.0
3 14/03/2016  USD 132.0 27.0           3.0
4 10/05/2000  KOR  33.6  6.6           0.6
5 04/04/2016  GBP  45.0 22.0           1.0