抱歉 - 我以前习惯使用Excel / Minitab / SQL,这种方式有所不同。
我有一个excel数据集,其中包含列" Date" (专栏" A"),"托盘" (列" B)," Lt" (专栏" K")和" Tt" (列" L"),其中列" Lt"的值和" Tt"依赖于彼此,以及固定参数(alpha和beta),它们列在电子表格的单元格中(分别为" T3"和#34; T4")。
在Excel中,我只需在单元格中输入Lt和Tt的公式" K6"和" L6"分别拖下来。然后Excel同时更新两列以达到正确的值。公式分别为=$T$3*K5+(1-$T$3)*(K5+L5)
和=$T$4*(C6-C5)+(1-$T$4)*L5
。
但是,在R中,我尝试使用for循环更新两列的值:
for(i in 3:368)
df[i,"Lt"]<-alpha*df[i-1,"Lt"]+(1-alpha)*(df[i-1,"Lt"]+df[i-1,"Tt"])
for (i in 3:368)
df[i,"Tt"]<-beta*(df[i,"Pallets"] - df[i-1,"Pallets"])+(1-beta)*df[i-1,"Tt"]
这个问题是这意味着两个列分别更改了它们的值。因此,他们在更新时不会互相交互,因此我最终会得到两个不太正确的列。
alpha和beta的值分别为269和0.787890411。在Excel中,我得到:
Date Pallets Lt Tt
01/01/2011 491
02/01/2011 385 269 0.79
03/01/2011 662 269.7879 0.843133
04/01/2011 28 270.6298 0.843133
05/01/2011 46 271.4718 0.843132
06/01/2011 403 272.3156 0.843132
07/01/2011 282 273.1588 0.843133
08/01/2011 315 274.0021 0.843133
然而对于R,因为两列不会同时更新,所以每次更新任一列时,Lt和Tt都会得到各种不同的值。目前我有:
Date Pallets Lt Tt
1 28/12/2011 491 NA NA
2 29/12/2011 385 269.0000 0.7878904
3 30/12/2011 662 269.7879 0.8431328
4 31/12/2011 28 270.6310 0.7161642
5 01/01/2012 46 271.3472 0.7196210
6 02/01/2012 403 272.0668 0.7908770
7 03/01/2012 282 272.8577 0.7665189
8 04/01/2012 315 273.6242 0.7729656
9 05/01/2012 327 274.3971 0.7752110
10 06/01/2012 458 275.1724 0.8012559
如何让两个列更新并相互反映,就像在Minitab或Excel中自动发生一样?
答案 0 :(得分:0)
结合for
循环:
for(i in seq(3, nrow(df), by = 1)) {
df[i,"Lt"]<-alpha*df[i-1,"Lt"]+(1-alpha)*(df[i-1,"Lt"]+df[i-1,"Tt"])
df[i,"Tt"]<-beta*(df[i,"Pallets"] - df[i-1,"Pallets"])+(1-beta)*df[i-1,"Tt"]
}
此外,您不应该使用硬编码的数字来计算行数。这些可能会发生变化,并且在代码执行时不断更新代码会很痛苦。