为 R 脚本创建日期(月份)豁免

Create date (month) exeption for R script

我正在尝试从具有 API 连接的网站访问和下载一些数据。挑战在于我要追踪的工具是具有通常惯例的未来(即每个月对应一个字母,然后是年份)。工具根名称是 JKM,结构是 JKMMYY(M 代表月份,Y 代表年份)。请记住,月份由 letter.So 表示,例如 1 月 19 日的合约将是 JKMF19(因为 F 代表 1 月)。到目前为止一切顺利..我应用了以下逻辑:

monthsymbol <- c("F", "G", "H", "J", "K", "M", "N", "Q", "U", "V", "X", "Z")

然后应用

monthsymbol[month(Sys.Date())+1])

除非我在十二月,否则我需要在明年的第一个月申请。我不太确定实现它的最佳方法是什么,也许是 if 子句?欢迎任何意见!

我在下面添加了代码,所以你明白了..

非常感谢!

library("lubridate")
library("jsonlite")
library("dplyr")
library("xts")
library("dygraphs")
library("rvest")    


##########################

#JKM historical data ####

apikey <- "a35e82bda46a34f21xxxxxxxxxxxxxxxxxxx"
current_year <- unlist(strsplit(x = as.character(year(Sys.Date())),split = "0"))[2]
todays_date <- gsub(x = as.character(Sys.Date()), pattern = "-", replacement = "")

#api in json format
json_file <- paste0("https://marketdata.websol.barchart.com/getHistory.json?apikey=",apikey,paste0("&symbol=JKM", monthsymbol[month(Sys.Date())+1]),current_year,"&type=daily&startDate=20160901&endDate=",todays_date,"&maxRecords=750")

我们可以使用 ifelse 并检查 month 的值并相应地 paste 字符串。如果它的值为 12(十二月),我们也会增加年份。

library(lubridate)

ifelse(month(x) == 12,
        paste0(root_name, monthsymbol[1], year + 1),
        paste0(root_name, monthsymbol[month(x) + 1], year))

 #[1] "JKMG19" "JKMX19" "JKMZ19" "JKMF20"

在上面的命令中,将脚本中的 x 替换为 Sys.Date()

数据

x <- as.Date(c("2018-01-09", "2018-10-06", "2018-11-02", "2018-12-21"))
year <- 19
root_name <- "JKM"