In this notebook we will take a look at some of the examples of ggplot2 from Chapter 5.

library(nycflights13)
library(tidyverse)
flights

Subsetting with filter().

All Janurary 1 days.

filter(flights, month == 1, day == 1)

Save, Save and Print.

jan1 <- filter(flights, month == 1, day == 1)
(dec25 <- filter(flights, month == 12, day == 25))

November and Decembers.

filter(flights, month == 11 | month == 12)
nov_dec <- filter(flights, month %in% c(11, 12))
filter(flights, !(arr_delay > 120 | dep_delay > 120))
filter(flights, arr_delay <= 120, dep_delay <= 120)

Reodering the rows with arrange().

arrange(flights, year, month, day)
arrange(flights, desc(arr_delay))

Subset variables with the select() function.

select(flights, year, month, day)
select(flights, year:day)
select(flights, -(year:day))
rename(flights, tail_num = tailnum)
select(flights, time_hour, air_time, everything())

Add new variables with mutate().

flights_sml <- select(flights, 
  year:day, 
  ends_with("delay"), 
  distance, 
  air_time
)
mutate(flights_sml,
  gain = arr_delay - dep_delay,
  speed = distance / air_time * 60
)

Only save new variables with transmute().

transmute(flights,
  gain = arr_delay - dep_delay,
  hours = air_time / 60,
  gain_per_hour = gain / hours
)

Summarize.

summarise(flights, delay = mean(dep_delay, na.rm = TRUE))
by_day <- group_by(flights, year, month, day)
summarise(by_day, delay = mean(dep_delay, na.rm = TRUE))

Piping.

Original:

by_dest <- group_by(flights, dest)
delay <- summarise(by_dest,
  count = n(),
  dist = mean(distance, na.rm = TRUE),
  delay = mean(arr_delay, na.rm = TRUE)
)
delay <- filter(delay, count > 20, dest != "HNL")
ggplot(data = delay, mapping = aes(x = dist, y = delay)) +
  geom_point(aes(size = count), alpha = 1/3) +
  geom_smooth(se = FALSE)

delays <- flights %>% 
  group_by(dest) %>% 
  summarise(
    count = n(),
    dist = mean(distance, na.rm = TRUE),
    delay = mean(arr_delay, na.rm = TRUE)
  ) %>% 
  filter(count > 20, dest != "HNL")
ggplot(data = delay, mapping = aes(x = dist, y = delay)) +
  geom_point(aes(size = count), alpha = 1/3) +
  geom_smooth(se = FALSE)

Missing data.

flights %>% 
  group_by(year, month, day) %>% 
  summarise(mean = mean(dep_delay))
flights %>% 
  group_by(year, month, day) %>% 
  summarise(mean = mean(dep_delay, na.rm = TRUE))
not_cancelled <- flights %>% 
  filter(!is.na(dep_delay), !is.na(arr_delay))
not_cancelled %>% 
  group_by(year, month, day) %>% 
  summarise(mean = mean(dep_delay))
delays <- not_cancelled %>% 
  group_by(tailnum) %>% 
  summarise(
    delay = mean(arr_delay)
  )
ggplot(data = delays, mapping = aes(x = delay)) + 
  geom_freqpoly(binwidth = 10)

delays <- not_cancelled %>% 
  group_by(tailnum) %>% 
  summarise(
    delay = mean(arr_delay, na.rm = TRUE),
    n = n()
  )
ggplot(data = delays, mapping = aes(x = n, y = delay)) + 
  geom_point(alpha = 1/10)

delays %>% 
  filter(n > 25) %>% 
  ggplot(mapping = aes(x = n, y = delay)) + 
    geom_point(alpha = 1/10)

not_cancelled %>% 
  group_by(year, month, day) %>% 
  summarise(
    avg_delay1 = mean(arr_delay),
    avg_delay2 = mean(arr_delay[arr_delay > 0]) # the average positive delay
  )
not_cancelled %>% 
  group_by(dest) %>% 
  summarise(distance_sd = sd(distance)) %>% 
  arrange(desc(distance_sd))
not_cancelled %>% 
  group_by(year, month, day) %>% 
  summarise(
    first = min(dep_time),
    last = max(dep_time)
  )

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.

LS0tCnRpdGxlOiAiQ29kZSBmcm9tIFIgZm9yIERhdGEgU2NpZW5jZSAtIENoYXB0ZXIgNSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKSW4gdGhpcyBub3RlYm9vayB3ZSB3aWxsIHRha2UgYSBsb29rIGF0IHNvbWUgb2YgdGhlIGV4YW1wbGVzIG9mIGdncGxvdDIgZnJvbSBDaGFwdGVyIDUuCgpgYGB7cn0KbGlicmFyeShueWNmbGlnaHRzMTMpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCmBgYHtyfQpmbGlnaHRzCmBgYAoKU3Vic2V0dGluZyB3aXRoIGZpbHRlcigpLiAgCgpBbGwgSmFudXJhcnkgMSBkYXlzLgoKYGBge3J9CmZpbHRlcihmbGlnaHRzLCBtb250aCA9PSAxLCBkYXkgPT0gMSkKYGBgCgpTYXZlLCBTYXZlIGFuZCBQcmludC4KCmBgYHtyfQpqYW4xIDwtIGZpbHRlcihmbGlnaHRzLCBtb250aCA9PSAxLCBkYXkgPT0gMSkKCihkZWMyNSA8LSBmaWx0ZXIoZmxpZ2h0cywgbW9udGggPT0gMTIsIGRheSA9PSAyNSkpCmBgYAoKTm92ZW1iZXIgYW5kIERlY2VtYmVycy4KCmBgYHtyfQpmaWx0ZXIoZmxpZ2h0cywgbW9udGggPT0gMTEgfCBtb250aCA9PSAxMikKYGBgCgpgYGB7cn0Kbm92X2RlYyA8LSBmaWx0ZXIoZmxpZ2h0cywgbW9udGggJWluJSBjKDExLCAxMikpCmBgYAoKYGBge3J9CmZpbHRlcihmbGlnaHRzLCAhKGFycl9kZWxheSA+IDEyMCB8IGRlcF9kZWxheSA+IDEyMCkpCmZpbHRlcihmbGlnaHRzLCBhcnJfZGVsYXkgPD0gMTIwLCBkZXBfZGVsYXkgPD0gMTIwKQpgYGAKClJlb2RlcmluZyB0aGUgcm93cyB3aXRoIGFycmFuZ2UoKS4KCmBgYHtyfQphcnJhbmdlKGZsaWdodHMsIHllYXIsIG1vbnRoLCBkYXkpCmBgYAoKYGBge3J9CmFycmFuZ2UoZmxpZ2h0cywgZGVzYyhhcnJfZGVsYXkpKQpgYGAKClN1YnNldCB2YXJpYWJsZXMgd2l0aCB0aGUgc2VsZWN0KCkgZnVuY3Rpb24uCgpgYGB7cn0Kc2VsZWN0KGZsaWdodHMsIHllYXIsIG1vbnRoLCBkYXkpCmBgYAoKYGBge3J9CnNlbGVjdChmbGlnaHRzLCB5ZWFyOmRheSkKYGBgCgpgYGB7cn0Kc2VsZWN0KGZsaWdodHMsIC0oeWVhcjpkYXkpKQpgYGAKCgpgYGB7cn0KcmVuYW1lKGZsaWdodHMsIHRhaWxfbnVtID0gdGFpbG51bSkKYGBgCgpgYGB7cn0Kc2VsZWN0KGZsaWdodHMsIHRpbWVfaG91ciwgYWlyX3RpbWUsIGV2ZXJ5dGhpbmcoKSkKYGBgCgpBZGQgbmV3IHZhcmlhYmxlcyB3aXRoIG11dGF0ZSgpLgoKYGBge3J9CmZsaWdodHNfc21sIDwtIHNlbGVjdChmbGlnaHRzLCAKICB5ZWFyOmRheSwgCiAgZW5kc193aXRoKCJkZWxheSIpLCAKICBkaXN0YW5jZSwgCiAgYWlyX3RpbWUKKQptdXRhdGUoZmxpZ2h0c19zbWwsCiAgZ2FpbiA9IGFycl9kZWxheSAtIGRlcF9kZWxheSwKICBzcGVlZCA9IGRpc3RhbmNlIC8gYWlyX3RpbWUgKiA2MAopCgpgYGAKCk9ubHkgc2F2ZSBuZXcgdmFyaWFibGVzIHdpdGggdHJhbnNtdXRlKCkuCgpgYGB7cn0KdHJhbnNtdXRlKGZsaWdodHMsCiAgZ2FpbiA9IGFycl9kZWxheSAtIGRlcF9kZWxheSwKICBob3VycyA9IGFpcl90aW1lIC8gNjAsCiAgZ2Fpbl9wZXJfaG91ciA9IGdhaW4gLyBob3VycwopCmBgYAoKU3VtbWFyaXplLgoKYGBge3J9CnN1bW1hcmlzZShmbGlnaHRzLCBkZWxheSA9IG1lYW4oZGVwX2RlbGF5LCBuYS5ybSA9IFRSVUUpKQpgYGAKCgpgYGB7cn0KYnlfZGF5IDwtIGdyb3VwX2J5KGZsaWdodHMsIHllYXIsIG1vbnRoLCBkYXkpCnN1bW1hcmlzZShieV9kYXksIGRlbGF5ID0gbWVhbihkZXBfZGVsYXksIG5hLnJtID0gVFJVRSkpCmBgYAoKUGlwaW5nLgoKT3JpZ2luYWw6CgpgYGB7cn0KYnlfZGVzdCA8LSBncm91cF9ieShmbGlnaHRzLCBkZXN0KQpkZWxheSA8LSBzdW1tYXJpc2UoYnlfZGVzdCwKICBjb3VudCA9IG4oKSwKICBkaXN0ID0gbWVhbihkaXN0YW5jZSwgbmEucm0gPSBUUlVFKSwKICBkZWxheSA9IG1lYW4oYXJyX2RlbGF5LCBuYS5ybSA9IFRSVUUpCikKZGVsYXkgPC0gZmlsdGVyKGRlbGF5LCBjb3VudCA+IDIwLCBkZXN0ICE9ICJITkwiKQoKZ2dwbG90KGRhdGEgPSBkZWxheSwgbWFwcGluZyA9IGFlcyh4ID0gZGlzdCwgeSA9IGRlbGF5KSkgKwogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBjb3VudCksIGFscGhhID0gMS8zKSArCiAgZ2VvbV9zbW9vdGgoc2UgPSBGQUxTRSkKYGBgCgpgYGB7cn0KZGVsYXlzIDwtIGZsaWdodHMgJT4lIAogIGdyb3VwX2J5KGRlc3QpICU+JSAKICBzdW1tYXJpc2UoCiAgICBjb3VudCA9IG4oKSwKICAgIGRpc3QgPSBtZWFuKGRpc3RhbmNlLCBuYS5ybSA9IFRSVUUpLAogICAgZGVsYXkgPSBtZWFuKGFycl9kZWxheSwgbmEucm0gPSBUUlVFKQogICkgJT4lIAogIGZpbHRlcihjb3VudCA+IDIwLCBkZXN0ICE9ICJITkwiKQoKZ2dwbG90KGRhdGEgPSBkZWxheSwgbWFwcGluZyA9IGFlcyh4ID0gZGlzdCwgeSA9IGRlbGF5KSkgKwogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBjb3VudCksIGFscGhhID0gMS8zKSArCiAgZ2VvbV9zbW9vdGgoc2UgPSBGQUxTRSkKYGBgCgpNaXNzaW5nIGRhdGEuCgpgYGB7cn0KZmxpZ2h0cyAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgbW9udGgsIGRheSkgJT4lIAogIHN1bW1hcmlzZShtZWFuID0gbWVhbihkZXBfZGVsYXkpKQpgYGAKCmBgYHtyfQpmbGlnaHRzICU+JSAKICBncm91cF9ieSh5ZWFyLCBtb250aCwgZGF5KSAlPiUgCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKGRlcF9kZWxheSwgbmEucm0gPSBUUlVFKSkKYGBgCgpgYGB7cn0Kbm90X2NhbmNlbGxlZCA8LSBmbGlnaHRzICU+JSAKICBmaWx0ZXIoIWlzLm5hKGRlcF9kZWxheSksICFpcy5uYShhcnJfZGVsYXkpKQoKbm90X2NhbmNlbGxlZCAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgbW9udGgsIGRheSkgJT4lIAogIHN1bW1hcmlzZShtZWFuID0gbWVhbihkZXBfZGVsYXkpKQpgYGAKCmBgYHtyfQpkZWxheXMgPC0gbm90X2NhbmNlbGxlZCAlPiUgCiAgZ3JvdXBfYnkodGFpbG51bSkgJT4lIAogIHN1bW1hcmlzZSgKICAgIGRlbGF5ID0gbWVhbihhcnJfZGVsYXkpCiAgKQoKZ2dwbG90KGRhdGEgPSBkZWxheXMsIG1hcHBpbmcgPSBhZXMoeCA9IGRlbGF5KSkgKyAKICBnZW9tX2ZyZXFwb2x5KGJpbndpZHRoID0gMTApCmBgYAoKYGBge3J9CmRlbGF5cyA8LSBub3RfY2FuY2VsbGVkICU+JSAKICBncm91cF9ieSh0YWlsbnVtKSAlPiUgCiAgc3VtbWFyaXNlKAogICAgZGVsYXkgPSBtZWFuKGFycl9kZWxheSwgbmEucm0gPSBUUlVFKSwKICAgIG4gPSBuKCkKICApCgpnZ3Bsb3QoZGF0YSA9IGRlbGF5cywgbWFwcGluZyA9IGFlcyh4ID0gbiwgeSA9IGRlbGF5KSkgKyAKICBnZW9tX3BvaW50KGFscGhhID0gMS8xMCkKYGBgCgpgYGB7cn0KZGVsYXlzICU+JSAKICBmaWx0ZXIobiA+IDI1KSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IG4sIHkgPSBkZWxheSkpICsgCiAgICBnZW9tX3BvaW50KGFscGhhID0gMS8xMCkKYGBgCgpgYGB7cn0Kbm90X2NhbmNlbGxlZCAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgbW9udGgsIGRheSkgJT4lIAogIHN1bW1hcmlzZSgKICAgIGF2Z19kZWxheTEgPSBtZWFuKGFycl9kZWxheSksCiAgICBhdmdfZGVsYXkyID0gbWVhbihhcnJfZGVsYXlbYXJyX2RlbGF5ID4gMF0pICMgdGhlIGF2ZXJhZ2UgcG9zaXRpdmUgZGVsYXkKICApCmBgYAoKCmBgYHtyfQpub3RfY2FuY2VsbGVkICU+JSAKICBncm91cF9ieShkZXN0KSAlPiUgCiAgc3VtbWFyaXNlKGRpc3RhbmNlX3NkID0gc2QoZGlzdGFuY2UpKSAlPiUgCiAgYXJyYW5nZShkZXNjKGRpc3RhbmNlX3NkKSkKYGBgCgpgYGB7cn0Kbm90X2NhbmNlbGxlZCAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgbW9udGgsIGRheSkgJT4lIAogIHN1bW1hcmlzZSgKICAgIGZpcnN0ID0gbWluKGRlcF90aW1lKSwKICAgIGxhc3QgPSBtYXgoZGVwX3RpbWUpCiAgKQpgYGAKCgpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ3RybCtBbHQrSSouCgpXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkN0cmwrU2hpZnQrSyogdG8gcHJldmlldyB0aGUgSFRNTCBmaWxlKS4KClRoZSBwcmV2aWV3IHNob3dzIHlvdSBhIHJlbmRlcmVkIEhUTUwgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGVkaXRvci4gQ29uc2VxdWVudGx5LCB1bmxpa2UgKktuaXQqLCAqUHJldmlldyogZG9lcyBub3QgcnVuIGFueSBSIGNvZGUgY2h1bmtzLiBJbnN0ZWFkLCB0aGUgb3V0cHV0IG9mIHRoZSBjaHVuayB3aGVuIGl0IHdhcyBsYXN0IHJ1biBpbiB0aGUgZWRpdG9yIGlzIGRpc3BsYXllZC4K