Предположим, что эти два data.frames
:
rates <- data.frame(Date = c("2000-01-01","2000-03-02","2000-03-25","2000-04-13"), Euro = c(1.2,1.27,1.4,1.6), Aussie = c(0.85,0.82,0.93,0.89))
toConvert <- data.frame(Date = c("2000-01-01","2000-03-02","2000-03-25","2000-04-13"), currency = c("Euro","Aussie","Euro","Aussie"),
Value1 = c(5,6,7,8), Value2 = c(10,15,23,85),Value3 = c(50,60,89,93))
Существует ли эффективный способ преобразования столбцов Value1
, Value2
и Value3
в доллары с учетом ставок в таблице rates
?
По сути, код должен найти скорость на основе столбцов Date
и currency
в таблице toConvert
и поделить Value1
, Value2
и Value3
на соответствующую скорость в таблице rates
.
Я уже пытался использовать for
l oop, который работает, но работает вечно. (Имейте в виду, что это примеры таблиц. Фактическая таблица toConvert
содержит 100 000 строк данных, а таблица rates
содержит ежедневные данные за 1990 г.).
Что я пробовал:
for (i in 1:nrow(toConvert)) {
rate <- as.numeric(rates[rates$Date == toConvert[i,]$Date, as.character(toConvert[1,]$currency)])
toConvert[i,]$Value1 <- toConvert[i,]$Value1 / rate
toConvert[i,]$Value2 <- toConvert[i,]$Value2 / rate
toConvert[i,]$Value3 <- toConvert[i,]$Value3 / rate
}
Что занимает много времени, используя 100 тыс. Строк.
Ожидаемый результат:
Date currency Value1 Value2 Value3
2000-01-01 Euro 4.166667 8.333333 41.66667
2000-03-02 Aussie 7.317073 18.292683 73.17073
2000-03-25 Euro 5.000000 16.428571 63.57143
2000-04-13 Aussie 8.988764 95.505618 104.49438