我正在模拟电池的充电状态。我发现的最好(唯一)工作解决方案是使用for循环。我想使用" apply"或者另一种解决方案,如果可能的话,这个for循环会大大减慢我的代码。
' DF'是我的数据框架。 ' DF $ batteryBeginCharge'是每个时间步(行)中电池的开始充电。 ' DF $ Charge.Discharge'是每个时间步进入或离开电池的电量。
for(i in 1:nrow(df))
{
if(i!=1) df$batteryBeginCharge[i] <<- df$batteryBeginCharge[i-1] + df$Charge.Discharge[i-1]
df$Charge.Discharge[i] <<- df$electricDemand[i] - df$electricSupply[i] #function of other columns of df, all in row 'i'
}
使用&#34; apply&#34;这似乎是一个完美的情况。家人,但我无法找到一种方法来检索&#34; apply&#34;中的前一行的值,这是我需要的,因为我需要我的电池和电池。参数。
我不认为我可以使用矢量化&#39; df $ batteryBeginCharge&#39;和&#39; df $ Charge.Discharge&#39;分开,因为它们显然是逐行链接的。
提前感谢任何想法。
答案 0 :(得分:1)
你可以在这里找到几个选项,例如使用apply,或dplyr或data.table。这里使用data.table的示例。这是你想要的吗?
library(data.table)
df <- data.table(batteryBeginCharge = c(10,25,40), Charge.Discharge = c(20,30,50))
df[ , x := shift(batteryBeginCharge, 1L, type="lag") + shift(Charge.Discharge, 1L, type="lag")]
请注意,这部分代码缺失(df$Charge.Discharge[i] <<-
),因此您的示例无法完全复制。