R语言调用priceR包historical_exchange_rates函数仅提取目标汇率值
实现方法
historical_exchange_rates()默认返回包含日期、汇率两列的data.frame对象,直接赋值会生成嵌套列,只需在调用时提取返回结果的第二列数值即可。注意apply按行运算时会自动把所有列转成字符型,容易出现日期参数类型错误,优先推荐使用data.table原生行操作实现。
方案1:修改现有apply代码
在匿名函数中提取返回结果的汇率值,同时补全日期类型转换,代码如下:
par_values_test$Par_value_EUR <- apply( par_values_test[,c('TR.FiCurrency','TR.FiIssueDate')], 1, function(y) { rate_res <- historical_exchange_rates( y['TR.FiCurrency'], "EUR", as.Date(y['TR.FiIssueDate']), as.Date(y['TR.FiIssueDate']) ) rate_res[[2]] } )
方案2:data.table原生语法(推荐)
使用by = .I指定按行逐组运算,不会自动转换列类型,代码更简洁、运行效率更高,还可以直接跳过EUR币种的接口请求:
par_values_test[, Par_value_EUR := { if (TR.FiCurrency == "EUR") { 1 } else { rate_res <- historical_exchange_rates(TR.FiCurrency, "EUR", TR.FiIssueDate, TR.FiIssueDate) rate_res[[2]] } }, by = .I]
运行后第一行2015-05-12的SEK兑EUR汇率会正确返回0.108031,Par_value_EUR列为数值型向量,不会再出现嵌套data.frame的问题。
内容的提问来源于stack exchange,提问作者Elias K.
相关产品推荐
相关产品推荐

