如何在 R 中的 group_by 的第一行中放置一个值

how to put a value in the first row of a group_by in R

我有很多不同的电动汽车 (car1 ... carN) 在旅行开始时 (start_trip) 和结束时 (end_trip).在旅行之间,汽车被装载到最大水平。我知道电池加载的充电容量(~0.35 /分钟)和每公里所需的容量(0.22 / 公里)。在两次行程之间,我们有几分钟的时间来加载,而在一次行程中,容量会减少。

如果我假设将来使用电动汽车提供相同的服务,我想估计满足 99% 的预订需要的行程之间的必要时间。

我有一份包含近 100 万笔内燃机车辆预订的清单。 carN starttime stoptime drivenkm ...

我用 loadtime = starttime - lag(stoptime) 计算旅行结束和最后一次使用开始之间的可能时间,所以我知道,SOC_S 是什么旅行.

我计算了一次旅行所需的容量,然后从 SOC_S 中减去它。所以我在旅行结束时得到 SOC_E。

现在我想考虑一下,旅行结束时电池并不是真的没电了。因此,上次行程的充电状态为 SOC_E + 行程之间的可能负载。

现在我遇到了一些问题:

  1. 最大负载为22千瓦时。所以负载是 max("loaded charge by time" 或 "maxLoad"。第一个是向量,第二个是常数。max(a, b) 不起作用。

  2. 我想将每辆车首次预订的第一个 SOC_S 设置为 22 千瓦时。它开始满载。如何在 R 中的每辆汽车的 group_by 第一行的特殊列中放置一个值?

  3. 如何计算满足 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) 
      )
    

此代码无效。问题是

  1. 如何使用新变量?有这样的colnames:"preTime <- (Nutzungsbeginn - lag(Nutzungsende))/60"

  2. 最后两个好像来个不规则循环

此致

鲁迪格

可重现的例子:

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))

关于你的第二个目标:

  1. I want to set the first SOC_S for the first booking for every car to 22 kWh. It starts fully loaded. How to put a value in a special column of the first row of a group_by in R for 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

无法真正理解问题的其余部分,但这可能会让您走得更远。

根据答案,我找到了以下解决方案:

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)

结果:

小标题:6 x 12

组:汽车[1]

  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% 的行程会出现问题,因为开始时的充电状态对于预定行程来说太低了。