我使用Neuralnet包预测股票价值(毕业论文)。示例数据在
下面predict<-runif(23,min=0,max=1)
day<-c(369:391)
ChoosedN<-c(2,5,5,5,5,5,4,3,5,5,5,2,1,1,5,5,4,3,2,3,4,3,2)
Profit<-runif(23,min=-2,max=5)
df<-data.frame(predict,day,ChoosedN,Profit)
colnames(df)<-c('predict','day','ChoosedN','Profit')
但我并不总是在同一时期进行投资(ChoodedN)。对于回溯测试神经网站,我必须跳过我仍处于适当位置的日子,即使神经网站说'买它'(即预测> 0.5)。框架看起来像这样
predict day ChoosedN Profit
1 0.6762981061 369 2 -1.6288823350
2 0.0195611224 370 5 1.5682195597
3 0.2442795106 371 5 0.6195915225
4 0.9587601107 372 5 -1.9701975542
5 0.7415729680 373 5 3.7826137026
6 0.4814927997 374 5 4.1228808255
7 0.1340754859 375 4 3.7818792837
8 0.6316874851 376 3 0.7670884461
9 0.1107241728 377 5 -1.3367400097
10 0.5850426450 378 5 2.2848396166
11 0.2809308425 379 5 2.5234691438
12 0.2835292015 380 2 -0.3291319925
13 0.3328713216 381 1 4.7425349397
14 0.4766904986 382 1 -0.4062103292
15 0.5005860797 383 5 4.8612083721
16 0.2734292494 384 5 -0.2320077328
17 0.1488479455 385 4 2.6195679584
18 0.9446908936 386 3 0.4889716264
19 0.8222738281 387 2 0.7362413658
20 0.7570014759 388 3 4.6661250258
21 0.9988698252 389 4 2.6340743946
22 0.8384663551 390 3 1.0428046484
23 0.1938821415 391 2 0.8855748393
我需要以这种方式创建新的data.frame。例如:如果预测(在第一行)&gt; 0.5,删除第二行和第三行(因为第一行中的ChoosedN是2所以在第一行之后必须删除后两行,因为我们仍然处于位置)。并以相同的方式继续第四(如果预测(第四行)> 0.5,则删除接下来的五行等等。当然,如果预测&lt; = 0.5也删除此行。 有什么简单的方法如何使用一些循环? 感谢
答案 0 :(得分:2)
我会创建一个新的数据帧,然后在for循环中使用rbind
绑定所需的行
newDF <- data.frame() # New, Empty Dataframe
i = 1 # Loop index Variable
while (i < nrow(df)) {
if (df$predict[i] > 0.5) { # If predict > 0.5,
newDF <- rbind(newDF, df[i,]) # Bind the row
i = i + df$ChoosedN[i] # Adjust for ChoosedN rows
}
i = i + 1 # Move to the next row
}