循环显示成功的进展

时间:2014-07-29 08:29:59

标签: r loops

我正在为我的毕业论文评估股票投资组合,我还不能通过这个循环。我有这个示例数据

Profit<-runif(20,min=-3,max=3)
df<-data.frame(Profit=Profit)

框架看起来像

       Profit
1   2.8708201
2  -1.7154991
3  -2.7206445
4   1.2499062
5  -1.1219258
6   1.3467217
7   0.3062028
8  -1.9457253
9   0.3397503
10  2.7755952
11  2.8754588
12  2.6819872
13 -0.7348086
14  2.5866392
15  1.4387628
16 -1.7970749
17 -1.2338479
18  2.7091911
19  0.4001345
20  2.5101570

这些是具体交易的利润百分比。我需要做的就是加入另一个专栏,这将是投资的进展。 可以说我有

startcash<-100000

我需要创建一个像

一样的循环
 Progress[1]<-startcash + ((startcash*Profit[1])/100) 
 Progress[2]<-Progress[1] + ((Progress[1]*Profit[2])/100)

等等。然后我将加入像

这样的列
cbind(df,Progress)

就是这样。 我尝试过这样的事情

startcash=100000
DF<-data.frame()
i=1
while (i <nrow(newDF)) {
  Progress<-startcash + ((startcash*Profit[i])/100)
  DF<-data.frame(Progress)
  startcash<-Progress
  i=i+1
  }

但它给出了废话,我仍然在循环区域学习,所以任何建议都得到了认可。 任何直截了当的方法怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用列名创建data.frame中没有任何数据的第二列,并将NA分配给每一行,如下所示。这将使接下来的几个步骤更容易。

Profit <- runif(20, min=-3, max=3)
df <- data.frame(Profit=Profit, Progress = NA)

现在使用计算中data.frame的元素

startcash<-100000

df$Progress[1] <- startcash + ( (startcash * df$Profit[1])/100) 
df$Progress[2] <- df$Progress[1] + ( (df$Progress[1] * df$Profit[2])/100)
head(df)

以下是使用while循环的示例。但这些都是危险的,有时永远不会结束。

startcash=100000

i=1
while (i <= nrow(df) ) {
  df$Progress[i] <- startcash + ( (startcash * df$Profit[i])/100) 
  startcash <- df$Progress[i]
  i=i+1
}

我更喜欢使用for循环,因为我知道它们会安全地结束。

startcash=100000

for(i in 1:nrow(df) ){
  df$Progress[i] <- startcash + ( (startcash * df$Profit[i])/100) 
  startcash <- df$Progress[i]
}

这应该是你需要它做的。