我有一些网站(
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
的文档,但我什至无法为此编写起草稿。有什么帮助吗?谢谢!