我正在尝试从具有API连接的网站访问和下载一些数据。挑战在于,我要追踪的工具是具有通常惯例的未来(每个月对应一个字母,后跟年份)。仪器的根名称为JKM,结构为JKMMYY(M表示月份,Y表示年份)。请记住,月份是用字母表示的,例如,1月19日的合同为JKMF19(因为F表示1月)。到目前为止一切顺利。.我应用了以下逻辑:
monthsymbol <- c("F", "G", "H", "J", "K", "M", "N", "Q", "U", "V", "X", "Z")
然后应用
monthsymbol[month(Sys.Date())+1])
除非我在12月(我需要申请明年的第一个月),否则此方法效果很好。我不太确定实现此目标的最佳方法是什么,也许是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")
答案 0 :(得分:2)
我们可以使用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"