用r语言计算每架飞机在第一次出现延误超过 1 小时情况前的飞行次数,数据集包含每架飞机的尾号、出发时间和延误时间
时间: 2024-04-30 08:23:39 浏览: 194
假设数据集为flight_data,其中包含以下列:tail_number(飞机尾号)、departure_time(出发时间,格式为Datetime)、delay(延误时间,单位为分钟)。
我们可以按照尾号进行分组,然后对每个分组进行如下操作:
1. 将departure_time按照升序排序。
2. 计算每个departure_time与其前一个departure_time之间的时间差(单位为分钟),并将第一个departure_time的时间差设为0。
3. 对时间差进行累加,得到每个departure_time的累计飞行时间(单位为分钟)。
4. 找到第一个delay大于1小时的departure_time,记录其之前的累计飞行时间。
代码如下:
```
library(dplyr)
flight_data %>%
arrange(tail_number, departure_time) %>%
group_by(tail_number) %>%
mutate(time_diff = c(0, difftime(departure_time, lag(departure_time), units = "mins")[-1]),
cumulative_time = cumsum(time_diff)) %>%
summarise(num_flights_before_delay = sum(cumulative_time < 60*delay[which(delay > 60)[1]]))
```
解释:
1. `arrange(tail_number, departure_time)` 将数据按照尾号和出发时间排序。
2. `group_by(tail_number)` 对每个尾号进行分组。
3. `mutate()` 增加两列,分别为时间差和累计飞行时间。`time_diff` 表示当前departure_time与前一个departure_time之间的时间差,`cumulative_time` 表示当前departure_time的累计飞行时间。`c(0, difftime(departure_time, lag(departure_time), units = "mins")[-1])` 表示时间差列,其中`lag(departure_time)` 表示前一个departure_time,`difftime(departure_time, lag(departure_time), units = "mins")` 表示当前departure_time与前一个departure_time之间的时间差,`[-1]` 表示去掉第一个时间差(因为第一个时间差并不是由两个departure_time之间的差值计算得到的)。
4. `summarise()` 按照尾号进行汇总,计算每个尾号在第一次出现延误超过1小时情况前的飞行次数。`delay[which(delay > 60)[1]]` 表示第一次出现延误超过1小时的延误时间,`cumulative_time < 60*delay[which(delay > 60)[1]]` 表示累计飞行时间小于第一次出现延误超过1小时的延误时间的departure_time。`sum(cumulative_time < 60*delay[which(delay > 60)[1]])` 表示在第一次出现延误超过1小时情况前的飞行次数。
阅读全文