函数,用于从环境中的一个ticker列表中计算卷数据的特定分位数

函数,用于从环境中的一个ticker列表中计算卷数据的特定分位数,r,function,quantmod,quantile,R,Function,Quantmod,Quantile,我试图用股票列表的正缺口开始值计算列数据的特定四分位数(在本例中为Q2) 我试图向您解释我的方法: 从.csv文件加载我的股票列表,创建一个包含所有股票的列表(确定) 我创建了两个函数。Q2和轧制_Q2 我在“.Volume”列的grep上测试了它们,这两种方法都很有效。Q2函数将根据您提供的整个数据集计算Q2。滚动_Q2将基于滚动窗口计算Q2的值。默认22 Q2 <- function(x) { stock_name <- stringi::stri_extract(names

我试图用股票列表的正缺口开始值计算列数据的特定四分位数(在本例中为Q2)

我试图向您解释我的方法:

从.csv文件加载我的股票列表,创建一个包含所有股票的列表(确定)


我创建了两个函数。Q2和轧制_Q2

我在“.Volume”列的grep上测试了它们,这两种方法都很有效。Q2函数将根据您提供的整个数据集计算Q2。滚动_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)
}

Q2您能否使用
dput
函数发布错误消息和一些示例数据?为了更好地理解,我刚刚发布了一个非常简单的示例。谢谢基于SQ,你到底想实现什么?预期的结果是什么?25%四分位数(体积介于4234700和8926850之间)作为真/假标志?我正在寻找的是一个新列,其值为25%四分位数(昨天为8926850),但计算所有日期。换句话说,25%的四分位数是每天计算的音量。听起来你想要一个滚动的25%四分位数。但基于哪n个周期(10天,20天)?8926850是基于从2018-01-01到昨天的整个期间。明天可能是相同的数字,除非有一个新的更高的数量,这与今天的价格行动可能是这样的情况。For.volume列工作得很好。但是,如果我使用自定义列,结果只考虑1位数字。因此,如果结果应该是“2.876”,那么我只得到“2”,如何表示我想要结果中的4位小数?删除公式的.Easy fix中的as.integer()。谢谢;-)
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)
}
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?
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)
}