对于R中不断增长的数据馈送,如何根据“峰值时间”和“返回基线时间”计算两个时间长度?

时间:2015-09-11 19:19:41

标签: r append lapply

Two time lengths to measured: departure from baseline range to peak, and peak back to baseline

如何用R?

完成以下任务
  1. 将不断变化的数据源(例如https://goo.gl/XCM6yG)连接到R,
  2. 一旦价格从初始基线范围开始一直上升到峰值(由绿色水平线表示),测量时间,
  3. 从峰值回到基线范围(青色线)测量时间
  4. 注意:“离开基线范围”(除非有更好的数学方法)定义为至少最近的5个价格均超过最近200个价格的均值超过3个标准差

1 个答案:

答案 0 :(得分:0)

这是一个非常模糊的问题,有一个未知的用例但是......我们走了。

  1. 以何种方式监控?长度?这就是我做的事情
  2. 向量有超过200个值,我们可以取平均值,因此我们需要一个控制流来处理该部分。
  3. 我添加了一些基本上强制你要计算的行为的噪音(ifelse(i%in%996:1000,100,0),这意味着,如果迭代器在996到1000之间,则向随机添加100正常我生成)。我们设置一个计数器并检查每个值是否大约是矢量值的3 sd,如果是,我们记录时间。
  4. 在数据的每个输入处...检查当前值是否为最大值...现在这更加棘手,因为我们必须查看趋势。这超出了我的帮助范围。
  5. 由于我不理解

    ,由你决定
     vec <- vecmean <- val5 <- c()
     counter <- 0 
    for(i in 1:1000){        
    vec[i] <- rnorm(1) + ifelse(i %in% 996:1000, 100, 0)
    Sys.sleep(.001)  # change to 1 second 
    #1 
    cat('The vector has',length(vec),'values within...\n')
    
    #2
    if(length(vec)>200){
      vecmean <- c(vecmean, mean(vec[(i-200):i]))
      cat('The mean of the last 200 observations is ',
          format(vecmean[length(vecmean)], digits =2),'\n')
    
      #3 
      upr <- vecmean[length(vecmean)] + 3*sd(vec)
      if(vec[i] > upr){
        counter <- counter + 1
      } else{
        counter <- 0
      }
      if(counter > 4){
        cat('Last 5 values greater than 3sd aboving the rolling mean!\n')
        val5 <- Sys.time()
        cat("Timestamp:",as.character(val5),'\n')
      }
    }
    # 4
    theMax <- max(vec)
    if(vec[i] == theMax & !is.null(val5) ){
      valMax <- Sys.time()
      valDiff <- valMax - val5
      cat('The time difference between the first flag and second is', as.character(valDiff),'\n')
    }
    
    
    }