我有以下表格:
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$var3
和test$var4
的值与test2
表中的相应值相乘,具体取决于日期。例如,如果test$var2
是CAD且test$var1
是12/12/2017,则应查看表test2
以查找该日期的CAD即期汇率并将其乘以{{ 1}}和test$var3
。
有办法吗?
答案 0 :(得分:2)
我们可以使用mapply
上的var1
和var2
的{{1}}分别过滤test
的行和列,以获取该特定货币的即期汇率在那一天。获得test2
后,我们可以将其乘以spot_rate
和var3
。
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