为 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"
我正在尝试从具有 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"