Уважаемое сообщество StackOverflow,
Сейчас я работаю над тем, как преобразовать вектор данных валюты, хранящихся в виде символа, в числовой вектор с возможностью преобразования валюты в другую валюту.
Итак, представьте, что мой вектор:
x <- c("$5M", "€10B", "CHF5K")
и я хотел бы перевести его в миллиард долларов США, поэтому результат должен быть (с учетом случайных курсов валют):
x <- c(5,11000,0.4)
Я разработал решение для этого с созданием двух функций, моя первая функция удаляет тысячи, миллиарды и миллионы символов и преобразует его:
convMK <- function(cats){
for(i in 1:length(cats)){
if(grepl("M",cats[i])==TRUE){
cats[i] <- gsub("M","",cats[i])
} else if(grepl("K",cats[i])==TRUE){
temp <- "0."
cats[i] <- gsub("K","",cats[i])
cats[i] <-paste0(temp,cats[i])
} else if(grepl("B",cats[i])==TRUE){
temp <- "00"
cats[i] <- gsub("B","",cats[i])
cats[i] <-paste0(cats[i],temp)
cats[i] <- gsub("\\.","",cats[i])
} else{}
}
return(cats)
}
Второй преобразует его в числовое с учетом обменных курсов:
convCurr2 <- function(cats) {
catsNum <- c(0)
for (i in 1:length(cats)) {
if (grepl("\\$", cats[i]) == TRUE) {
cats[i] <- gsub("\\$", "", cats[i])
catsNum[i] <- as.numeric(cats[i])
catsNum[i] <- catsNum[i] * exUSD
} else if (grepl("\\€", cats[i]) == TRUE) {
cats[i] <- gsub("\\€", "", cats[i])
catsNum[i] <- as.numeric(cats[i])
catsNum[i] <- catsNum[i] * exEUR
} else if (grepl("CA", cats[i]) == TRUE) {
cats[i] <- gsub("CA", "", cats[i])
catsNum[i] <- as.numeric(cats[i])
catsNum[i] <- catsNum[i] * exCA
} else if (grepl("\\£", cats[i]) == TRUE) {
cats[i] <- gsub("£", "", cats[i])
catsNum[i] <- as.numeric(cats[i])
catsNum[i] <- catsNum[i] * exGBP
} else if (grepl("\\CHF", cats[i]) == TRUE) {
cats[i] <- gsub("CHF", "", cats[i])
catsNum[i] <- as.numeric(cats[i])
catsNum[i] <- catsNum[i] * exCHF
}
}
return(catsNum)
}
И тогда я запускаю функции в следующем порядке:
cats<-convMK(cats)
cats <- convCurr2(cats)
Мой вопрос сейчас таков: не существует ли более простого и короткого пути? Потому что это кажется слишком сложным! Тем более, что я до сих пор не реализовал решение проблемы, эта функция также должна искать правильный обменный курс к определенной дате.
Мне очень любопытны ваши ответы, я начал изучать R только неделю назад, и, будучи студентом по маркетингу, у меня не так много опыта программирования (имеется в виду: нет). Таким образом, я стремлюсь научиться писать более элегантный код:)