R - Создать несколько новых столбцов, используя условные операторы
Мне интересно, есть ли способ создать несколько столбцов, основанных на условии (ях).
Например, ниже, у меня есть фрейм данных с данными, и я хочу создать два столбца на основе ccy. Один столбец - это коэффициент конвертации в фунты стерлингов в ccy, а другой - конвертация в cad.
Если я передам мутации, я смогу заставить их работать, но есть повторение (и в моей реальной проблеме у меня есть сложный список ifelse, поэтому повторение кода для каждого столбца создаст много повторений).
df <- structure(list(product = c('option', 'forward', 'forward', 'option'),
ccy = c('usd', 'usd', 'eur', 'usd'),
amount = c(1000, 2000, 1000, 5000)),
.Names = c('product', 'ccy', 'amount'),
row.names = c(NA, 4L),
class = "data.frame")
df
product ccy amount
1 option usd 1000
2 forward usd 2000
3 forward eur 1000
4 option usd 5000
df %>% mutate(gbp_amount =
ifelse(ccy == 'usd', round(amount / 1.8, 2),
ifelse(ccy == 'eur', round(amount / 1.3, 2),
'not_converted'))) %>%
mutate(cad_amount =
ifelse(ccy == 'usd', round(amount / 0.85, 2),
ifelse(ccy == 'eur', round(amount / .7, 2),
'not_converted')))
product ccy amount gbp_amount cad_amount
1 option usd 1000 555.56 1176.47
2 forward usd 2000 1111.11 2352.94
3 forward eur 1000 769.23 1428.57
4 option usd 5000 2777.78 5882.35
Есть ли способ создать несколько столбцов на основе одного условия if?
Например, что-то вроде этого псевдокода ...
df %>% ifelse(df$ccy == 'usd',
(mutate(gbp_amount = round(amount / 1.8, 2)),
mutate(cad_amount = round(amount / 0.85, 2))),
ifelse(df$ccy == 'eur',
(mutate(gbp_amount = round(amount / 1.3, 2)),
mutate(cad_amount = round(amount / 0.7, 2))),
'not_converted'))