第1部分:
我有以下代码将数据框中的相关列从任何货币转换为USD:
df %>%
mutate_at(vars(contains('cost_AUD')), list(~ . * ER_AUD_USD )) %>%
mutate_at(vars(contains('cost_GBP')), list(~ . * ER_GBP_USD )) %>%
mutate_at(vars(contains('cost_EUR')), list(~ . * ER_EUR_USD ))
我的数据框看起来像这样(但有更多列):
date cost_AUD_d cost_CAD_e cost_AUD_f ER_AUD_USD ER_CAD_USD
1 2016-01-01 80.18 5.95 4.83 0.70 0.69
2 2016-02-01 85.72 5.12 3.98 0.71 0.67
3 2016-03-01 67.33 5.12 5.02 0.75 0.72
4 2016-04-01 77.42 5.11 4.55 0.77 0.73
5 2016-05-01 75.40 5.54 4.92 0.73 0.70
有更好的方法吗?由于这些列的名称正确,因此只需将每个价格所使用的货币与汇率列的中间部分(即cost _ ***和ER _ *** _ USD)进行匹配。有没有办法将切换语句与mutate合并在一起?
第2部分:
在此之前,我从已经拥有的汇率中得出一些我需要的汇率:
df %>% mutate(ER_AUD_USD = ER_GBP_USD / ER_GBP_AUD, ER_CAD_USD = ER_GBP_USD / ER_GBP_CAD, ER_EUR_USD = ER_GBP_USD / ER_GBP_EUR )
我也想使它更具动态性,这比较简单,因此第1部分可能会有更好/不同的方式,再次将汇率命名为ER_GBP_USD为GBP / USD,所以:
GBP / USD÷GBP / EUR = GBP
即ER _ *** _ USD
样本汇率df(尽管我先这样做,但与上面相同的df):
date ER_GBP_CAD ER_GBP_AUD ER_GBP_EUR
1 2016-01-01 2.02 2.07 1.11
2 2016-02-01 1.99 2.10 1.14
3 2016-03-01 1.91 2.06 1.17
4 2016-04-01 1.87 2.04 1.13
第1部分:我有以下代码,它将数据框中的相关列从任何货币转换为USD:df%>%mutate_at(vars(contains('cost_AUD')),list(〜。* ER_AUD_USD))% > ...
这里是一种可能的方式: