我有以下代码将数据框中的相关列从任何货币转换为USD:
imports
我的数据框看起来像这样(但有更多列):
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 ))
有更好的方法吗?由于这些列的名称正确,因此只需将每个价格所使用的货币与汇率列的中间部分(即cost _ ***和ER _ *** _ USD)进行匹配。有没有办法将切换语句与mutate合并。
答案 0 :(得分:0)
这是一种可能的方法:
#Please include all currencies that you have
currency <- c('AUD', 'GBP', 'EUR')
#Loop over each of them
do.call(cbind, lapply(currency, function(x) {
#Find all the columns with that currency
group_cols <- grep(paste0('cost_', x), names(df))
#Get the exhange rate column
col_to_multiply <- grep(paste0('ER_', x), names(df))
#Repeat the exchange rate column same as total columns and multiply
df[group_cols] * df[rep(col_to_multiply, length(group_cols))]
}))
或与purrr::map_dfc
purrr::map_dfc(currency, ~{
group_cols <- grep(paste0('cost_', .x), names(df))
col_to_multiply <- grep(paste0('ER_', .x), names(df))
df[group_cols] * df[rep(col_to_multiply, length(group_cols))]
})