Исключение даты (месяца) для сценария R - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь получить доступ и загрузить некоторые данные с веб-сайта с подключением API.Проблема в том, что инструмент, который я хочу отследить, - это будущее с обычным соглашением (то есть каждый месяц соответствует букве, за которой следует год).Корневое имя инструмента - JKM, структура - JKMMYY (M для месяца, Y для года).Имейте в виду, что месяц представлен буквой. Так, например, контракт на 19 января будет JKMF19 (потому что F представляет январь).Пока все хорошо .. Я применил следующую логику:

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")

1 Ответ

0 голосов
/ 19 декабря 2018

Мы можем использовать 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() в вашем скрипте.

data

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