使用前一行值的滚动函数 [R]

问题描述 投票:0回答:0

我有一些网站(

a,b,c
),其中土壤具有一定的最大容量(
100,200
)。对于每个时间段(我数据集中的每一行),我都计算了含水量的变化 (
change
)。

set.seed(2023)
db <- data.table(ID=c(rep("a",3),rep("b",3),rep("c",3)),
                 capacity=c(rep(100,3),rep(200,6)),
                 prc=round(runif(9,1,100),0),
                 evpt=round(runif(9,1,100),0))

db[prc>=evpt,change:=prc-evpt]
db[prc<evpt,change:=exp(-((evpt-prc)/capacity))]


   ID capacity prc evpt     change
1:  a      100  39   20 19.0000000
2:  a      100  74   35 39.0000000
3:  a      100  67   19 48.0000000
4:  b      200  49   78  0.8650223
5:  b      200  41   70  0.8650223
6:  b      200  94   75 19.0000000
7:  c      200  74   51 23.0000000
8:  c      200  67   71  0.9801987
9:  c      200  77   73  4.0000000

在时间 0 处,站点拥有最大的

capacity
水。那么,如果
prc
>
evpt
,则
change
就是在之前的内容中加入的水,不超过最大容量。如果
prc
<
evpt
change
是前面含水量的乘数,从而减少了含量

# draft function
new_content <- function(change,capacity,prc,evpt){
  if (prc>evpt) {
    min(change+previous_content,capacity)
    } else {
      previous_content*change
    }
}

然后我应该为每个站点应用该功能以获得一个新列(

content
)显示含水量的时间变化。

我无法解决的问题是如何定义变量

previous_content
,即一开始等于最大容量,然后等于上一行的内容。

我检查了

data.table::frollapply
zoo:rollapply
的文档,但我什至无法为此编写起草稿。有什么帮助吗?谢谢!

r datatable zoo
© www.soinside.com 2019 - 2024. All rights reserved.