suppressPackageStartupMessages(library(nycflights13))
package 㤼㸱nycflights13㤼㸲 was built under R version 3.6.3
suppressPackageStartupMessages(library(tidyverse))
package 㤼㸱tidyverse㤼㸲 was built under R version 3.6.3

1. How could you use arrange() to sort all missing values to the start? (Hint: use is.na()).

The arrange() function puts NA values last.

arrange(flights, dep_time) %>%
  tail()

Using desc() does not change that.

arrange(flights, desc(dep_time))

To put NA values first, we can add an indicator of whether the column has a missing value. Then we sort by the missing indicator column and the column of interest. For example, to sort the data frame by departure time (dep_time) in ascending order but NA values first, run the following.

arrange(flights, desc(is.na(dep_time)), dep_time)

The flights will first be sorted by desc(is.na(dep_time)). Since desc(is.na(dep_time)) is either TRUE when dep_time is missing, or FALSE, when it is not, the rows with missing values of dep_time will come first, since TRUE > FALSE.

2. Sort flights to find the most delayed flights. Find the flights that left earliest.

Find the most delayed flights by sorting the table by departure delay, dep_delay, in descending order.

arrange(flights, desc(dep_delay))

The most delayed flight was HA 51, JFK to HNL, which was scheduled to leave on January 09, 2013 09:00. Note that the departure time is given as 641, which seems to be less than the scheduled departure time. But the departure was delayed 1,301 minutes, which is 21 hours, 41 minutes. The departure time is the day after the scheduled departure time. Be happy that you weren’t on that flight, and if you happened to have been on that flight and are reading this, I’m sorry for you.

Similarly, the earliest departing flight can be found by sorting dep_delay in ascending order.

arrange(flights, dep_delay)

Flight B6 97 (JFK to DEN) scheduled to depart on December 07, 2013 at 21:23 departed 43 minutes early.

3. Sort flights to find the fastest flights.

The fastest flight is the one with the average ground speed, which can be calculated from the distance and duration of the flight. Since ground speed is not included in the data, first create new column in flights containing ground speed in miles per hour.

fastest_flights <- mutate(flights, mph = distance / air_time * 60)
fastest_flights <- select(
  fastest_flights, mph, distance, air_time,
  flight, origin, dest, year, month, day
)

Now sort the flights by mph to find the fastest flights

head(arrange(fastest_flights, desc(mph)))

4. Which flights traveled the longest? Which traveled the shortest?

To find the longest flight, sort the flights by the distance column in descending order.

arrange(flights, desc(distance))

The longest flight is HA 51, JFK to HNL, which is 4,983 miles.

To find the shortest flight, sort the flights by the distance in ascending order, which is the default sort order.

arrange(flights, distance)

The shortest flight is US 1632, EWR to LGA, which is only 17 miles. This is a flight between two of the New York area airports. However, since this flight is missing a departure time so it either did not actually fly or there is a problem with the data.

The terms “longest” and “shortest” could also refer to the time of the flight instead of the distance. Now the longest and shortest flights by can be found by sorting by the air_time column. The longest flights by airtime are the following.

arrange(flights, desc(air_time))

The shortest flights by airtime are the following.

arrange(flights, air_time)
LS0tDQp0aXRsZTogIkFycmFuZ2Ugcm93cyB3aXRoIGFycmFuZ2UoKSINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQotLS0NCg0KYGBge3IgbG9hZGxpYnJhcnl9DQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeShueWNmbGlnaHRzMTMpKQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxpYnJhcnkodGlkeXZlcnNlKSkNCmBgYA0KDQojIyMgMS4gSG93IGNvdWxkIHlvdSB1c2UgYXJyYW5nZSgpIHRvIHNvcnQgYWxsIG1pc3NpbmcgdmFsdWVzIHRvIHRoZSBzdGFydD8gKEhpbnQ6IHVzZSBgaXMubmEoKWApLg0KDQpUaGUgYGFycmFuZ2UoKWAgZnVuY3Rpb24gcHV0cyBgTkFgIHZhbHVlcyBsYXN0Lg0KDQpgYGB7ciBzdGFydG5hfQ0KYXJyYW5nZShmbGlnaHRzLCBkZXBfdGltZSkgJT4lDQogIHRhaWwoKQ0KYGBgDQoNClVzaW5nIGBkZXNjKClgIGRvZXMgbm90IGNoYW5nZSB0aGF0Lg0KDQpgYGB7ciBkZXNjc3RhcnRuYX0NCmFycmFuZ2UoZmxpZ2h0cywgZGVzYyhkZXBfdGltZSkpDQpgYGANCg0KVG8gcHV0IGBOQWAgdmFsdWVzIGZpcnN0LCB3ZSBjYW4gYWRkIGFuIGluZGljYXRvciBvZiB3aGV0aGVyIHRoZSBjb2x1bW4gaGFzIGEgbWlzc2luZyB2YWx1ZS4gVGhlbiB3ZSBzb3J0IGJ5IHRoZSBtaXNzaW5nIGluZGljYXRvciBjb2x1bW4gYW5kIHRoZSBjb2x1bW4gb2YgaW50ZXJlc3QuIEZvciBleGFtcGxlLCB0byBzb3J0IHRoZSBkYXRhIGZyYW1lIGJ5IGRlcGFydHVyZSB0aW1lIChgZGVwX3RpbWVgKSBpbiBhc2NlbmRpbmcgb3JkZXIgYnV0IGBOQWAgdmFsdWVzIGZpcnN0LCBydW4gdGhlIGZvbGxvd2luZy4NCg0KYGBge3IgbmFkZXB0aW1lfQ0KYXJyYW5nZShmbGlnaHRzLCBkZXNjKGlzLm5hKGRlcF90aW1lKSksIGRlcF90aW1lKQ0KYGBgDQoNClRoZSBmbGlnaHRzIHdpbGwgZmlyc3QgYmUgc29ydGVkIGJ5IGBkZXNjKGlzLm5hKGRlcF90aW1lKSlgLiBTaW5jZSBgZGVzYyhpcy5uYShkZXBfdGltZSkpYCBpcyBlaXRoZXIgYFRSVUVgIHdoZW4gYGRlcF90aW1lYCBpcyBtaXNzaW5nLCBvciBgRkFMU0VgLCB3aGVuIGl0IGlzIG5vdCwgdGhlIHJvd3Mgd2l0aCBtaXNzaW5nIHZhbHVlcyBvZiBkZXBfdGltZSB3aWxsIGNvbWUgZmlyc3QsIHNpbmNlIGBUUlVFID4gRkFMU0VgLg0KDQojIyMgMi4gU29ydCBmbGlnaHRzIHRvIGZpbmQgdGhlIG1vc3QgZGVsYXllZCBmbGlnaHRzLiBGaW5kIHRoZSBmbGlnaHRzIHRoYXQgbGVmdCBlYXJsaWVzdC4NCg0KRmluZCB0aGUgbW9zdCBkZWxheWVkIGZsaWdodHMgYnkgc29ydGluZyB0aGUgdGFibGUgYnkgZGVwYXJ0dXJlIGRlbGF5LCBgZGVwX2RlbGF5YCwgaW4gZGVzY2VuZGluZyBvcmRlci4NCg0KYGBge3IgZGVzY2RlcGRlbGF5fQ0KYXJyYW5nZShmbGlnaHRzLCBkZXNjKGRlcF9kZWxheSkpDQpgYGANCg0KVGhlIG1vc3QgZGVsYXllZCBmbGlnaHQgd2FzIEhBIDUxLCBKRksgdG8gSE5MLCB3aGljaCB3YXMgc2NoZWR1bGVkIHRvIGxlYXZlIG9uIEphbnVhcnkgMDksIDIwMTMgMDk6MDAuIE5vdGUgdGhhdCB0aGUgZGVwYXJ0dXJlIHRpbWUgaXMgZ2l2ZW4gYXMgNjQxLCB3aGljaCBzZWVtcyB0byBiZSBsZXNzIHRoYW4gdGhlIHNjaGVkdWxlZCBkZXBhcnR1cmUgdGltZS4gQnV0IHRoZSBkZXBhcnR1cmUgd2FzIGRlbGF5ZWQgMSwzMDEgbWludXRlcywgd2hpY2ggaXMgMjEgaG91cnMsIDQxIG1pbnV0ZXMuIFRoZSBkZXBhcnR1cmUgdGltZSBpcyB0aGUgZGF5IGFmdGVyIHRoZSBzY2hlZHVsZWQgZGVwYXJ0dXJlIHRpbWUuIEJlIGhhcHB5IHRoYXQgeW91IHdlcmVu4oCZdCBvbiB0aGF0IGZsaWdodCwgYW5kIGlmIHlvdSBoYXBwZW5lZCB0byBoYXZlIGJlZW4gb24gdGhhdCBmbGlnaHQgYW5kIGFyZSByZWFkaW5nIHRoaXMsIEnigJltIHNvcnJ5IGZvciB5b3UuDQoNClNpbWlsYXJseSwgdGhlIGVhcmxpZXN0IGRlcGFydGluZyBmbGlnaHQgY2FuIGJlIGZvdW5kIGJ5IHNvcnRpbmcgZGVwX2RlbGF5IGluIGFzY2VuZGluZyBvcmRlci4NCg0KYGBge3IgZWFybGllc3R9DQphcnJhbmdlKGZsaWdodHMsIGRlcF9kZWxheSkNCmBgYA0KDQpGbGlnaHQgQjYgOTcgKEpGSyB0byBERU4pIHNjaGVkdWxlZCB0byBkZXBhcnQgb24gRGVjZW1iZXIgMDcsIDIwMTMgYXQgMjE6MjMgZGVwYXJ0ZWQgNDMgbWludXRlcyBlYXJseS4NCg0KIyMjIDMuIFNvcnQgZmxpZ2h0cyB0byBmaW5kIHRoZSBmYXN0ZXN0IGZsaWdodHMuDQoNClRoZSBmYXN0ZXN0IGZsaWdodCBpcyB0aGUgb25lIHdpdGggdGhlIGF2ZXJhZ2UgW2dyb3VuZCBzcGVlZF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JvdW5kX3NwZWVkKSwgd2hpY2ggY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZGlzdGFuY2UgYW5kIGR1cmF0aW9uIG9mIHRoZSBmbGlnaHQuIFNpbmNlIGdyb3VuZCBzcGVlZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRhdGEsIGZpcnN0IGNyZWF0ZSBuZXcgY29sdW1uIGluIGZsaWdodHMgY29udGFpbmluZyBncm91bmQgc3BlZWQgaW4gbWlsZXMgcGVyIGhvdXIuDQoNCmBgYHtyIGZhc3Rlc3R9DQpmYXN0ZXN0X2ZsaWdodHMgPC0gbXV0YXRlKGZsaWdodHMsIG1waCA9IGRpc3RhbmNlIC8gYWlyX3RpbWUgKiA2MCkNCmZhc3Rlc3RfZmxpZ2h0cyA8LSBzZWxlY3QoDQogIGZhc3Rlc3RfZmxpZ2h0cywgbXBoLCBkaXN0YW5jZSwgYWlyX3RpbWUsDQogIGZsaWdodCwgb3JpZ2luLCBkZXN0LCB5ZWFyLCBtb250aCwgZGF5DQopDQpgYGANCg0KTm93IHNvcnQgdGhlIGZsaWdodHMgYnkgYG1waGAgdG8gZmluZCB0aGUgZmFzdGVzdCBmbGlnaHRzDQoNCmBgYHtyIGxvb2tmYXN0fQ0KaGVhZChhcnJhbmdlKGZhc3Rlc3RfZmxpZ2h0cywgZGVzYyhtcGgpKSkNCmBgYA0KDQojIyMgNC4gV2hpY2ggZmxpZ2h0cyB0cmF2ZWxlZCB0aGUgbG9uZ2VzdD8gV2hpY2ggdHJhdmVsZWQgdGhlIHNob3J0ZXN0Pw0KDQpUbyBmaW5kIHRoZSBsb25nZXN0IGZsaWdodCwgc29ydCB0aGUgZmxpZ2h0cyBieSB0aGUgYGRpc3RhbmNlYCBjb2x1bW4gaW4gZGVzY2VuZGluZyBvcmRlci4NCg0KYGBge3IgYXJyYW5nZWRpc3R9DQphcnJhbmdlKGZsaWdodHMsIGRlc2MoZGlzdGFuY2UpKQ0KYGBgDQoNClRoZSBsb25nZXN0IGZsaWdodCBpcyBIQSA1MSwgSkZLIHRvIEhOTCwgd2hpY2ggaXMgNCw5ODMgbWlsZXMuDQoNClRvIGZpbmQgdGhlIHNob3J0ZXN0IGZsaWdodCwgc29ydCB0aGUgZmxpZ2h0cyBieSB0aGUgZGlzdGFuY2UgaW4gYXNjZW5kaW5nIG9yZGVyLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyLg0KDQpgYGB7ciBzaG9ydGRpc3R9DQphcnJhbmdlKGZsaWdodHMsIGRpc3RhbmNlKQ0KYGBgDQoNClRoZSBzaG9ydGVzdCBmbGlnaHQgaXMgVVMgMTYzMiwgRVdSIHRvIExHQSwgd2hpY2ggaXMgb25seSAxNyBtaWxlcy4gVGhpcyBpcyBhIGZsaWdodCBiZXR3ZWVuIHR3byBvZiB0aGUgTmV3IFlvcmsgYXJlYSBhaXJwb3J0cy4gSG93ZXZlciwgc2luY2UgdGhpcyBmbGlnaHQgaXMgbWlzc2luZyBhIGRlcGFydHVyZSB0aW1lIHNvIGl0IGVpdGhlciBkaWQgbm90IGFjdHVhbGx5IGZseSBvciB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgZGF0YS4NCg0KVGhlIHRlcm1zIOKAnGxvbmdlc3TigJ0gYW5kIOKAnHNob3J0ZXN04oCdIGNvdWxkIGFsc28gcmVmZXIgdG8gdGhlIHRpbWUgb2YgdGhlIGZsaWdodCBpbnN0ZWFkIG9mIHRoZSBkaXN0YW5jZS4gTm93IHRoZSBsb25nZXN0IGFuZCBzaG9ydGVzdCBmbGlnaHRzIGJ5IGNhbiBiZSBmb3VuZCBieSBzb3J0aW5nIGJ5IHRoZSBgYWlyX3RpbWVgIGNvbHVtbi4gVGhlIGxvbmdlc3QgZmxpZ2h0cyBieSBhaXJ0aW1lIGFyZSB0aGUgZm9sbG93aW5nLg0KDQpgYGB7ciBsb25nYWlyfQ0KYXJyYW5nZShmbGlnaHRzLCBkZXNjKGFpcl90aW1lKSkNCmBgYA0KDQpUaGUgc2hvcnRlc3QgZmxpZ2h0cyBieSBhaXJ0aW1lIGFyZSB0aGUgZm9sbG93aW5nLg0KDQpgYGB7ciBzaG9ydGFpcn0NCmFycmFuZ2UoZmxpZ2h0cywgYWlyX3RpbWUpDQpgYGA=