没有错误,但无法在R中获得所需的结果

时间:2015-02-20 09:42:21

标签: r

我一直试图在数字中找到百分比价格跳跃(+ -15%变化),当有跳跃时它会给我相应的日期。但是,当有第一次跳转时,它会从内部for-loop中断出来,为我提供了相应的correspndong数据,并将存储在temp.cyc数据帧中。

程序没有显示任何错误,但它重复相同的no。整个过程,当我检查test.df的值时,它显示NA。

任何人都可以帮我理解发生了什么吗?而且我是R的新手,所以如果你能详细给出你的答案会很有帮助。谢谢:)

 # Defining variables
  row= nrow(price.close)
  col=ncol(price.close)

#Defining Matrix 
  m<-matrix(0,ncol=1,nrow=row)
  p<-matrix(0,ncol=5,nrow=row)

# Dataframe to temporaily store percentage Change
  test.df<- vector(mode="numeric", length=nrow(price.close))

# Dataframe to extract required Values
  temp.cyc<-as.data.frame(p)
  colnames(temp.cyc)<-c("cyc.duration","Start.date","End.date","Start.date.value","End.date.value")




for( j in 1:row)
  {
    for(i in j:row)
    {
       test.df<-(price.close[(i+1),2]-price.close[j,2])/price.close[j,2]



     if(test.df >= 0.15 | test.df <= -0.15 | is.na(test.df)== TRUE )
          { 

            temp.cyc$Start.date.value = price.close[j,2]
            temp.cyc$End.date.value  <- price.close[i,2]
            temp.cyc$Start.date      <- price.close[j,1]
            temp.cyc$End.date        <- price.close[i,1]
           }  

           break

    }
  }  

1 个答案:

答案 0 :(得分:0)

在我看来,您正在将此用于财务数据,例如股票价格。如果这个假设是正确的,那么我建议您应该使用具有此功能的包。我建议 quantmod package

这是一个简短的例子,说明当价格上涨或下跌超过15%时如何获得日期。

library(quantmod)


# create some dummy stock data over 10 days period
# next time I hope you will attach some of your data
stockClose <- c(100,50,75,70,68,100,115,120,130,100)
stockDates <- seq(as.Date("2014-01-01"),length=10,by="+1 days")
stock.xts <- as.xts(stockClose,stockDates)

# calculate change , check '?Delt' help for more info 
change <- Delt(stock.xts)

#get only those rows where price change in both directions is higher then 15%
specialDays <- change[coredata(change) < -0.15 | coredata(change) > 0.15,]

#get dates
justDates <- index(specialDays)

给了我们&#34; 2014-01-02&#34; &#34; 2014年1月3日&#34; &#34; 2014年1月6日&#34;和&#34; 2014-01-10&#34;

如果您想要实际比较进入和退出位置的所有可能组合,那么您可以使用以下内容:

library(quantmod)

calculatePeriods <- function(){


  stockClose <- c(100,50,75,70,68,100,115,120,130,100)

  stockDates <- seq(as.Date("2014-01-01"),length=10,by="+1 days")


  stock.xts <- as.xts(stockClose,stockDates)

  # you will be adding rows to thid df
  result <- data.frame()


  for(i in 1:(length(stock.xts)-1)){


    for(j in 2:length(stock.xts)){

      change <- (coredata(stock.xts[j])-coredata(stock.xts[i]))/coredata(stock.xts[i])

      if(change < (-0.15) | change > (0.15)){

        row <- data.frame("cyc.duration"=as.numeric(index(stock.xts[j])-index(stock.xts[i]),units="days"),"Start.date"=index(stock.xts[i]),"End.date"=index(stock.xts[j]),"Start.date.value"=coredata(stock.xts[i]),"End.date.value"=coredata(stock.xts[j]))
        result <- rbind(result,row)
      }

    }


  }
  return(result)
}