首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:计算需求和供应动态

R:计算需求和供应动态
EN

Stack Overflow用户
提问于 2018-02-13 01:10:34
回答 1查看 155关注 0票数 0

首先是示例数据

代码语言:javascript
复制
set.seed(123)
dat <- data.frame(day= 1:50 ,demand = sample(0:17, size = 50,replace = T),supply = sample(2:9, size = 50,replace = T))
reservoir <- 200

我有一个从第1天到第50天的需求和供应数据,第四列是供应和需求之间的差异

代码语言:javascript
复制
dat$balance <- dat$supply - dat$demand 

我想计算另一个名为net deficit的列。下面是逻辑

如果对于给定的一天,需求>供应,则存在赤字。然而,这个赤字可以由reservoir来弥补,因此net deficit列将为零,

如果供应>需求,则将多余的供应添加到水库(仅当水库<200时).If水库已满负荷(200),则丢弃多余的供应

如果需求>供应和水库为零,则net deficit列将获取需求和供应之间的差值

例如,从第1天开始,赤字(balance)为3。此赤字由水库弥补(使其为197),并且net deficit为零。

第二天:赤字是-9,这是从储存库借来的(使其为188),net defict将再次为零。

第3天,有多余的1用于填充水库(由于水库< 100),net deficit的值为0,水库变为(189)

第四天:有13的赤字,这是由水库弥补。存储量进一步减少到176个

我希望这一点是清楚的。

如果在某个时间点,储层变为0,则无法补偿赤字,因此net deficit将获得dat$balance的值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 08:03:10

解决方案基本上是使用for循环根据每天的余额构建reservoir向量。所提供的样本实际上没有设法在50天内清空储水池,所以我将其延长了(但这意味着数字与50天的示例不同)。然后,您可以简单地将向量作为列绑定到数据,并在reservoir为正数时将net_deficit列设置为零。

代码语言:javascript
复制
library(tidyverse)
set.seed(123)
dat <- tibble(
  day = 1:100,
  demand = sample(0:17, size = 100,replace = T),
  supply = sample(2:9, size = 100,replace = T)
  )

balance <- dat$supply - dat$demand
reservoir <-  rep(200, nrow(dat))
reservoir[1] <- reservoir[1] + balance[1]
for (day in 2:nrow(dat)){
  reservoir[day] <- reservoir[day - 1] + balance[day]
}

out <- dat %>%
  bind_cols(balance =  balance, reservoir = reservoir) %>%
  mutate(net_deficit = ifelse(reservoir >= 0, 0, reservoir))
out[61:70, ]
# A tibble: 10 x 6
     day demand supply balance reservoir net_deficit
   <int>  <int>  <int>   <int>     <dbl>       <dbl>
 1    61     11      6     - 5      3.00        0   
 2    62      1      4       3      6.00        0   
 3    63      6      7       1      7.00        0   
 4    64      4      4       0      7.00        0   
 5    65     14      4     -10    - 3.00      - 3.00
 6    66      8      6     - 2    - 5.00      - 5.00
 7    67     14      7     - 7    -12.0       -12.0 
 8    68     14      3     -11    -23.0       -23.0 
 9    69     14      5     - 9    -32.0       -32.0 
10    70      7      4     - 3    -35.0       -35.0 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48751875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档