Функция для расчета определенного квантиля объемных данных из списка тикеров в среде - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь вычислить конкретное квартильное число (в этом примере Q2) данных столбца с положительным значением открытия разрыва списка акций.

Я пытаюсь объяснить вам мой подход:

Загрузить мой список тикеров из CSV-файла, создать список со всеми из них (ОК)

library(quantmod)
Tickers <- read.csv("nasdaq_tickers_list.csv", stringsAsFactors = FALSE)

getSymbols(Tickers$Tickers,from="2018-08-01", src="yahoo" )
stock_data = sapply(.GlobalEnv, is.xts)
all_stocks <- do.call(list, mget(names(stock_data)[stock_data])) 

У меня есть следующая функция, которая отлично работает для вычисления квартилей столбца (Stock_name.Postitivegap)и разделить их на соответствующий квартильный ранг:

Posgapqrank <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Volqrank")
column_names <- c(names(x), stock_name)
x$posgapqrank <- as.integer(cut(x[, grep(".Positivegap", colnames(x))],quantile(x[,grep(".Positivegap",colnames(x))],probs=0:4/4),include.lowest=TRUE))
x <- setNames(x, column_names)
return(x)
}

Теперь я хотел бы, чтобы функция вычисляла конкретный квантиль того же столбца исходных данных, ".Positivegap", то есть Q2

Дляс этой целью я ввел 0.25 в функции квартиля, но получаю ошибку ... какая-нибудь помощь здесь?

Q2 <- function(x) {
stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
stock_name <- paste0(stock_name, ".Q2")
column_names <- c(names(x), stock_name)
x$gapq2 <- as.integer(quantile(x[,grep(".Positivegap",colnames(x))],0.25)))
x <- setNames(x, column_names)
return(x)
}

Большое спасибо за любой комментарий.

Давайте сделаем это проще и начнемс менее сложным примером

getSymbols("SQ", from="2018-01-01", src="yahoo")
quantile(SQ$SQ.Volume, 0.25)
#How do I ad a new column to the SQ dataset with the Q2 volume data for each day?

1 Ответ

0 голосов
/ 04 октября 2018

Я создал 2 функции.Q2 и Rolling_Q2.

Я проверил их на grep имени столбца ".Volume", и оба работают.Функция Q2 рассчитает Q2 из всего набора данных, который вы ему предоставили.Rolling_Q2 рассчитает значение Q2 на основе скользящего окна.По умолчанию 22.

Q2 <- function(x) {
  stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
  stock_name <- paste0(stock_name, ".Q2")
  column_names <- c(names(x), stock_name)
  x$gapq2 <- as.integer(quantile(x[,grep(".Positivegap",colnames(x))], 0.25))
  x <- setNames(x, column_names)
  return(x)
}


rolling_Q2 <- function(x, width = 22) {
  stock_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
  stock_name <- paste0(stock_name, ".Q2")
  column_names <- c(names(x), stock_name)
  x$gapq2 <- rollapply(x[,grep(".Positivegap",colnames(x))], width = width, FUN = function(x) as.integer(quantile(x, 0.25)))
  x <- setNames(x, column_names)
  return(x)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...