基于列名/货币(使用转换语句)更改数据框

问题描述 投票:0回答:1

第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

/ USD×EUR / GBP = EUR / USD

即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))% > ...

r dplyr switch-statement currency-exchange-rates
1个回答
0
投票

这里是一种可能的方式:

© www.soinside.com 2019 - 2024. All rights reserved.