Я пытаюсь создать функцию, которая позволяет мне go через каждую строку фрейма данных и конвертировать валюту, в которой находится эта строка, в евро, используя обменный курс этого года, используя следующий код
Valuta <- function(Code, Year, Exchange) {
for (i in 1:nrow(DataFilter)) {
if (DataFilter[i,'curcd'] == deparse(substitute(Code))) {
if (DataFilter[i,'fyear']== deparse(substitute(Year))) {
DataFilter[i,'ebitda'] <- DataFilter[i,'ebitda'] / Exchange[,'Value'][Exchange[,'Year'==Year]]
DataFilter[i,'invt'] <- DataFilter[i,'invt'] / Exchange[,'Value'][Exchange[,'Year'==Year]]
DataFilter[i,'sale'] <- DataFilter[i,'sale'] / Exchange[,'Value'][Exchange[,'Year'==Year]]
}
}
}
}
Использование этого кода для вызова функции:
Valuta(GBP, 1999 , EURGBPTMP)
R возвращает:
Error in Exchange[, "Value"][Exchange[, "Year" == Year]] :
invalid subscript type 'list'
GBP - это позывной в фрейме данных DataFilter
EURGBPTMP
- это фрейм данных, содержащий 2 столбца: Year
и Value
, где каждый Year
уникален
Использование unlist()
возвращает тот же результат, даже если результат Exchange[,'Value'][Exchange[,'Year'==Year]]
не должно быть списка
Добавлен образец данных
Образец для DataFilter:
DataFilter <- data.frame(curcd = c("EUR", "EUR", "GBP", "USD"), fyear
= c("1999", "2000", "2001", "2001"), ebitda = c(63842000, 248290000, 67014000, 34089000), invt = c(107280000, 188001000, 206027000, 185752000), sale = c(414495000, 935212000, 561064000, 518802000))
Образец для EURGBPTMP:
EURGBPTMP <- data.frame(Year = c("1999", "2000", "2001","2002"), Value
= c(0.62170, 0.62410, 0.60850, 0.65050))
С этим образцом Valuta(GBP, 1999 , EURGBPTMP)
должен редактировать только строку 3