R Apply - 需要检索上一行中的值

时间:2017-04-02 03:47:44

标签: r apply

我正在模拟电池的充电状态。我发现的最好(唯一)工作解决方案是使用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;分开,因为它们显然是逐行链接的。

提前感谢任何想法。

1 个答案:

答案 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] <<-),因此您的示例无法完全复制。