我在代码中使用以下for循环来获取数据表中值的最低上边界和最高下边界。
我的数据如下:
g1 g2 v1 RRP AVAILABLE FORSALE ACCEPT REJECT
A 1 -29 55 1 1 0 0
A 1 -28 45 1 0 0 1
A 1 -27 51 1 0 0 1
A 1 -26 50 1 1 1 0
A 1 -25 48 1 0 0 0
A 1 -24 37 1 1 1 0
A 1 -23 39 1 1 0 0
A 1 -22 35 1 0 0 1
A 1 -21 32 1 0 0 0
A 1 -20 45 1 1 0 0
A 1 -19 50 1 1 1 0
A 1 -18 44 0 1 0 0
这是我正在使用的for循环。我不确定如何提高此代码的性能,因为我想不出一种更好的方法来处理计算 HLM 和 LUM 所需的滚动值表中每个组的下一个 HLM 和 LUM 的值。关于我的 for循环设置中的数字 31 ,每个组中恰好有 31 行数据。
for(i in 1:nrow(d1)/31){
HLM <- -1000
LUM <- 10000
for(j in 1:31){
x <- x+1
if(d1$AVAILABLE[x]){
d1$HLM[x] <- ifelse(!d1$ACCEPT[x]&!d1$FORSALE[x],max(d1$RRP[x],HLM),
min(d1$RRP[x],HLM))
HLM <- d1$HLM[x]
d1$LUM[x] <- ifelse(!d1$REJECT[x]&d1$FORSALE[x],min(d1$RRP[x],LUM),
max(d1$RRP[x],LUM))
LUM <- d1$LUM[x]
if(LUM < HLM & d1$ACCEPT[x]){
d1$HLM[x] <- d1$LUM[x]
HLM <- LUM
}
if(LUM < HLM & d1$REJECT[x]){
d1$LUM[x] <- d1$HLM[x]
LUM <- HLM
}
}
if(!d1$AVAILABLE[x]){
d1$HLM[x] <- -1000
d1$LUM[x] <- 10000
}
返回的值如下:
g1 g2 v1 RRP AVAILABLE FORSALE ACCEPT REJECT cMax cMin
A 1 -29 55 1 1 0 0 50 -1000
A 1 -28 45 1 0 0 1 50 45
A 1 -27 51 1 0 0 1 51 51
A 1 -26 50 1 1 1 0 50 50
A 1 -25 48 1 0 0 0 50 48
A 1 -24 37 1 1 1 0 37 37
A 1 -23 39 1 1 0 0 39 37
A 1 -22 35 1 0 0 1 39 35
A 1 -21 32 1 0 0 0 36 35
A 1 -20 45 1 1 0 0 45 35
A 1 -19 50 1 1 1 0 45 35
A 1 -18 44 0 1 0 0 44 35
我的代码的逻辑是这样的: