我正在为我的毕业论文评估股票投资组合,我还不能通过这个循环。我有这个示例数据
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
}
但它给出了废话,我仍然在循环区域学习,所以任何建议都得到了认可。 任何直截了当的方法怎么做?
答案 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]
}
这应该是你需要它做的。