为R脚本创建日期(月)示例

时间:2018-12-19 05:28:51

标签: r rvest jsonlite

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

1 个答案:

答案 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"