加速循环,根据前一行迭代计算值,排除不符合R中条件的行
我是R的新手,目前在R中执行循环时遇到困难。就我而言,R中缓慢的循环是由于“编程不好”。这里很可能也是这样(尽管我一直在尽力) 在如何提高循环效率方面,我遇到了一些建议,例如数据帧的矢量化。由于我对给定投标报价行的计算取决于先前验证的投标报价(而当前报价又基于计算进行验证),因此我无法找出如何使矢量化成为可能 我的数据由时间间隔不规则的买卖报价组成。在进一步的数据处理之前,我需要使用“离群值过滤器”对异常和离群值的刻度进行过滤,如Dacorogna,M.M.,Müller,U.A.,Nagler,R.J.,Olsen,R.B.,Pictet,O.V.(1993)所建议的那样。外汇市场每日和每周季节波动的地理模型。(过滤器在其附录中提供)。要计算条件,我需要“当前”投标报价和最后验证的投标报价。基于这些条件,我随后(在)验证当前的投标报价 我目前的方法是:假设第一个投标报价,加速循环,根据前一行迭代计算值,排除不符合R中条件的行,r,performance,loops,R,Performance,Loops,我是R的新手,目前在R中执行循环时遇到困难。就我而言,R中缓慢的循环是由于“编程不好”。这里很可能也是这样(尽管我一直在尽力) 在如何提高循环效率方面,我遇到了一些建议,例如数据帧的矢量化。由于我对给定投标报价行的计算取决于先前验证的投标报价(而当前报价又基于计算进行验证),因此我无法找出如何使矢量化成为可能 我的数据由时间间隔不规则的买卖报价组成。在进一步的数据处理之前,我需要使用“离群值过滤器”对异常和离群值的刻度进行过滤,如Dacorogna,M.M.,Müller,U.A.,Nagler
df[1,]
,是经过验证的。然后迭代计算投标报价的条件(B条件I、B条件II、C条件I、C条件I、C条件II、C条件II)和验证(由if语句捕获)。如果未验证“当前”投标报价,我将从数据框中排除相应的行。否则,我将保持数据帧完整。我的基本原理是,或者最初是,对于i+1
,将自动验证更新数据框中的前一行
i <- 2
while (i<=nrow(df)){
#for (i in seq(2,nrow(df)) ){
#
*#calculates the distance to previous, validated bid quote*
df$dBidQuoteABS_V[i]<-abs(as.numeric(df$BidQuote[i]-df$BidQuote[i-1]))
df$BConditionI[i]<-ifelse(df$dBidQuoteABS_V[i] < 0.25,1,0)
df$dT[i]<-as.numeric(df$DateTime[i]-df$DateTime[i-1])
df$dT[i]<-df$dT[i]/(24*60*60)
df$BConditionII[i]<-ifelse(df$dBidQuoteABS_V[i]<2*df$spread[i-1]+0.18*df$dT[i],1,0)
df$SConditionI[i]<-ifelse(0.0001<df$spread[i] &df$spread[i]<0.025,1,0)
df$SConditionII[i]<-ifelse(df$dBidQuoteABS_V[i]<1.3+45*df$dT[i],1,0)
df$SConditionIII[i]<-ifelse(df$dBidQuoteABS_V[i]<4,1,0)
if(df$BConditionI[i]==0 |df$BConditionII[i]==0| df$SConditionI[i]==0|df$SConditionII[i]==0|df$SConditionIII[i]==0) {
df<-df[-i, ]
} else{
df<-df
}
rownames(df) <- seq(length=nrow(df))
i <- i+1
}
DateTime Bid Quote Ask Quote dBidQuote dT Validated
1. T1 B1 A1 - - YES
2. T2 B2 A2 A2-A1 T2-T1 YES
3. T3 B3 A3 A3-A2 T3-T2 NO #I therefore 'exclude this row in the loop
4. T4 B4 A4 A4-A2 T4-T2 YES #As the previous row is not validated, the differences will be taken wrt. the validated row 3.