【发布时间】:2018-11-01 20:32:11
【问题描述】:
尊敬的 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,作为一名市场营销专业的学生,我没有那么多编码经验(意思是:没有)。因此,我渴望学习编写更优雅的代码:)
【问题讨论】:
-
这对the Code Review Stack Exchange来说可能是一个更好的问题
-
我投票结束这个问题,因为它更适合codereview.stackexchange.com
-
看看stackoverflow.com/questions/26694042/…。它建议了几个处理当前汇率的包
标签: r