Как рассчитать количество рейсов с указанным c условием - PullRequest
0 голосов
/ 15 апреля 2020

Я использую фрейм данных nycflights13 :: flight и хочу рассчитать количество рейсов, совершенных самолетом до его первой задержки более 1 часа. Как я могу это сделать? Я попытался с group_by и фильтром, но я не смог. Есть ли способ подсчета строк до условия (например, до первого dep_delay> 60)?

Спасибо.

Ответы [ 2 ]

1 голос
/ 15 апреля 2020
library(dplyr)
library(nycflights13)
data("flights")

Могут быть более элегантные способы, но этот код подсчитывает общее количество рейсов, совершенных каждым самолетом (исключая отмененные рейсы), и объединяет его с полетами, которые не были отменены, группируя по уникальному идентификатору самолета (tailnum), сортировка по дате / времени отправления, присвоение row_number меньше 1, фильтрация по задержкам> 60 и взятие первой строки.

select(
  filter(flights, !is.na(dep_time)) %>% 
  count(tailnum, name="flights") %>% left_join(
      filter(flights, !is.na(dep_time)) %>% 
      group_by(tailnum) %>%
      arrange(month, day, dep_time) %>%
      mutate(not_delayed=row_number() -1) %>%
      filter(dep_delay>60) %>% slice(1)), 
  tailnum, flights, not_delayed)

# A tibble: 4,037 x 3
   tailnum flights not_delayed
   <chr>     <int>       <dbl>
 1 D942DN        4           0
 2 N0EGMQ      354          53
 3 N10156      146           9
 4 N102UW       48          25
 5 N103US       46          NA
 6 N104UW       47           3
 7 N10575      272           0
 8 N105UW       45          22
 9 N107US       41          20
10 N108UW       60          36
# ... with 4,027 more rows

Плоскость с tailnum N103US совершил 46 рейсов, ни один из которых не был задержан более чем на 1 час. Таким образом, количество полетов, которые он совершил за до , его первая 1-часовая задержка не определено или NA.

0 голосов
/ 16 апреля 2020

Я получил ответ:

flights %>%
#Eliminate the NAs
filter(!is.na(dep_time)) %>% 
#Sort by date and time
arrange(time_hour) %>% 
group_by(tailnum) %>%
#cumulative number of flights delayed more than one hour
mutate(acum_delay = cumsum(dep_delay > 60)) %>% 
#count the number of flights                                         
summarise(before_1hdelay = sum(acum_delay < 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...