我有很多不同的电动汽车(car1 ... carN),在开始(start_trip)和结束(end_trip)的开始时带有充电状态(SOC)。在行驶之间,车辆装载到最高水平。我知道装载电池的充电容量(~0.35 /分钟)和每公里所需的容量(0.22 /公里)。在两次旅行中,我们有几分钟的时间来装载,在旅行期间,容量会减少。
我想估计在99%的预订中旅行之间必要的时间,如果我假设将来会用电子汽车提供相同的服务。
我列出了近100万辆使用燃烧车辆的预订。 carN starttime stoptime drivenkm ...
我计算了行程结束和最后一次使用开始之间的可能时间,加载时间=启动时间 - 延迟(停止时间),所以我知道,行程开始时的SOC_S是什么。
我计算出行程所需的容量并从SOC_S中减去它。所以我在旅行结束时得到了SOC_E。
现在我想考虑一下,在旅行结束时电池并非真空。因此,充电状态是最后一次行程的SOC_E +行程之间可能的负载。
现在我遇到了一些问题:
最大负载为22 kWh。所以负载是最大值(“按时间加载”或“maxLoad”。第一个是向量,secon是一个常数.max(a,b)不起作用。
我想将每辆车的首次预订的第一个SOC_S设置为22千瓦时。它开始满载。如何将值放在R中group_by的第一行的特殊列中,用于evvery car?
如何计算所需载荷时间的值以满足99%的使用量?像excel中的某个解决方案?
B_ES <- B_ES %>%
arrange(car, start_trip) %>%
group_by(car) %>%
mutate(
preTime <- (start_trip - lag(end_trip))/60,
useTime <- (end_trip - start_trip)/60,
postTime <- (lead(start_trip) - end_trip)/60,
SOC_S <- preTime * ZOE_charge,
E_consumption <- km * ZOE_consumption,
SOC_E <- SOC_S - E_consumption
SOC_S <- SOC_S + lag(SOC_E)
)
此代码不起作用。问题是
我如何使用新变量?有这样的类名:“preTime&lt; - (Nutzungsbeginn - lag(Nutzungsende))/ 60”
最后两个似乎是一个不规则的循环。
问候
Ruediger
答案 0 :(得分:1)
可重复的例子:
foo <- data_frame(group = c('A','A','A','B','B','C','C')
, x1 = c(1,2,3,1,2,1,2)
, SOC_S = c(4,5,6,4,5,4,5))
关于你的第二个目标:
- 我想将每辆车的首次预订的第一个SOC_S设置为22千瓦时。它开始满载。如何将值放在R的group_by的第一行的特殊列中,用于evvery car?
醇>
library(tidyverse)
dd <- foo %>% group_by(group) %>%
mutate(rownumber = 1:n() ## a helper column to find first row
, special = ifelse(rownumber == 1, 22, SOC_S)) ## vectorized edits based on rownumber
注意:如果愿意,您也可以将special
替换为SOC_S
。
无法解决问题的其余部分,但这可能会让你更进一步。
答案 1 :(得分:0)
根据答案,我找到了以下解决方案:
ZOE_battery <- 22 # kWh
ZOE_consumption <- 0.233 # kWh/Kilometer
ZOE_chargeflow <- 0.366 # kWh/Minute
ZOE <- ZOE %>%
arrange(car, start_trip) %>%
group_by(car) %>%
mutate(
seq_id = row_number(),
preTime = (start_trip - lag(end_trip))/60,
useTime = (end_trip - start_trip)/60,
postTime = (lead(start_trip) - end_trip)/60,
SOC_S = ifelse(seq_id == 1, ZOE_battery,
ifelse(preTime * ZOE_chargeflow > ZOE_battery, ZOE_battery, preTime * ZOE_chargeflow)),
consumption = km * ZOE_consumption,
SOC_E = SOC_S - consumption
)
ZOE_P <- ZOE %>% # Trips with possible problems
filter(SOC_S <= 0 | SOC_E <0)
结果:
place car start_trip end_trip km seq_id preTime useTime postTime SOC_S consumption
<fctr> <int> <dttm> <dttm> <int> <int> <time> <time> <time> <dbl> <dbl>
1 681990401 171 2014-04-30 20:31:00 2014-05-01 12:08:00 43 1 NA secs 937 secs 1350 secs 22 10.019
2 681990401 171 2014-05-02 10:38:00 2014-05-02 14:03:00 32 2 1350 secs 205 secs 1512 secs 22 7.456
3 681990401 171 2014-05-03 15:15:00 2014-05-03 22:49:00 25 3 1512 secs 454 secs 791 secs 22 5.825
4 681990401 171 2014-05-04 12:00:00 2014-05-04 17:07:00 71 4 791 secs 307 secs 879 secs 22 16.543
5 681990401 171 2014-05-05 07:46:00 2014-05-05 13:38:00 71 5 879 secs 352 secs 1418 secs 22 16.543
6 681990401 171 2014-05-06 13:16:00 2014-05-06 19:20:00 52 6 1418 secs 364 secs 19 secs 22 12.116
现在我知道,只有1.5%的旅行会遇到问题,因为启动时的充电状态对于预定行程来说是低的。