Reading and Writing data

Practice reading and writing data, more dplyr and a plot

  1. Load the packages that we will use
library(tidyverse)
library(here)
library(janitor)
library(skimr)
  1. Download CO2 emissions per capita from Our World in Data into the directory for this post.

  2. Assign the location of the file file_csv. The data should be in the same directory as this file.

file_csv <- here("_posts", 
                 "2022-02-19-reading-and-writing-data",   "co-emissions-per-capita.csv")

emissions <- read_csv(file_csv)
  1. Show first 10 rows (observations of) emissions
emissions
# A tibble: 23,307 x 4
   Entity      Code   Year `Annual CO2 emissions (per capita)`
   <chr>       <chr> <dbl>                               <dbl>
 1 Afghanistan AFG    1949                              0.0019
 2 Afghanistan AFG    1950                              0.0109
 3 Afghanistan AFG    1951                              0.0117
 4 Afghanistan AFG    1952                              0.0115
 5 Afghanistan AFG    1953                              0.0132
 6 Afghanistan AFG    1954                              0.013 
 7 Afghanistan AFG    1955                              0.0186
 8 Afghanistan AFG    1956                              0.0218
 9 Afghanistan AFG    1957                              0.0343
10 Afghanistan AFG    1958                              0.038 
# ... with 23,297 more rows
  1. Start with emissions data THEN,
tidy_emissions <- emissions %>% 
  clean_names()

tidy_emissions
# A tibble: 23,307 x 4
   entity      code   year annual_co2_emissions_per_capita
   <chr>       <chr> <dbl>                           <dbl>
 1 Afghanistan AFG    1949                          0.0019
 2 Afghanistan AFG    1950                          0.0109
 3 Afghanistan AFG    1951                          0.0117
 4 Afghanistan AFG    1952                          0.0115
 5 Afghanistan AFG    1953                          0.0132
 6 Afghanistan AFG    1954                          0.013 
 7 Afghanistan AFG    1955                          0.0186
 8 Afghanistan AFG    1956                          0.0218
 9 Afghanistan AFG    1957                          0.0343
10 Afghanistan AFG    1958                          0.038 
# ... with 23,297 more rows
  1. Start with the tidy_emissions THEN,
tidy_emissions %>% 
  filter(year == 2004) %>% 
  skim()
Table 1: Data summary
Name Piped data
Number of rows 229
Number of columns 4
_______________________
Column type frequency:
character 2
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
entity 0 1.00 4 32 0 229 0
code 12 0.95 3 8 0 217 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
year 0 1 2004.00 0.00 2004.00 2004.00 2004.00 2004.00 2004.0 ▁▁▇▁▁
annual_co2_emissions_per_capita 0 1 5.43 6.99 0.02 0.83 3.23 8.45 56.7 ▇▁▁▁▁
  1. 12 Observations have a missing code. How are these observations different?
tidy_emissions %>% 
  filter(year == 2004, is.na(code))
# A tibble: 12 x 4
   entity                     code   year annual_co2_emissions_per_ca~
   <chr>                      <chr> <dbl>                        <dbl>
 1 Africa                     <NA>   2004                         1.16
 2 Asia                       <NA>   2004                         2.97
 3 Asia (excl. China & India) <NA>   2004                         3.61
 4 EU-27                      <NA>   2004                         8.68
 5 EU-28                      <NA>   2004                         8.79
 6 Europe                     <NA>   2004                         8.81
 7 Europe (excl. EU-27)       <NA>   2004                         8.96
 8 Europe (excl. EU-28)       <NA>   2004                         8.80
 9 North America              <NA>   2004                        14.5 
10 North America (excl. USA)  <NA>   2004                         5.53
11 Oceania                    <NA>   2004                        13.2 
12 South America              <NA>   2004                         2.36
  1. Start with tidy_emissions THEN
emissions_2004 <- tidy_emissions %>% 
  filter(year == 2004, !is.na(code)) %>% 
  select(-year) %>% 
  rename(country = entity)

emissions_2004
# A tibble: 217 x 3
   country             code  annual_co2_emissions_per_capita
   <chr>               <chr>                           <dbl>
 1 Afghanistan         AFG                             0.036
 2 Albania             ALB                             1.32 
 3 Algeria             DZA                             2.69 
 4 Andorra             AND                             7.35 
 5 Angola              AGO                             0.997
 6 Anguilla            AIA                             9.89 
 7 Antigua and Barbuda ATG                             4.56 
 8 Argentina           ARG                             4.08 
 9 Armenia             ARM                             1.23 
10 Aruba               ABW                            26.5  
# ... with 207 more rows
  1. Which 15 countries have the highest annual_co2_emissions_per_capita?
max_15_emitters <- emissions_2004 %>% 
  slice_max(annual_co2_emissions_per_capita, n = 15)
  1. Which 15 countries have the lowest annual_co2_emissions_per_capita?
min_15_emitters <- emissions_2004 %>% 
  slice_min(annual_co2_emissions_per_capita, n =15)
  1. Use bind_rows to bind together the max_15_emitter and min_15_emitters assign the outpout to max_min_15.
max_min_15 <- bind_rows(max_15_emitters, min_15_emitters)
  1. Export max_min_15 to 3 files formats.
max_min_15 %>% write_csv("max_min_15.csv") # comma separated values
max_min_15 %>% write_tsv("max_min_15.tsv") # tab separated 
max_min_15 %>% write_delim("max_min_15.psv", delim = "|") # pipe separated
  1. Read the 3 file formats into R.
max_min_15_csv <- read_csv("max_min_15.csv") # comma separated value
max_min_15_tsv <- read_tsv("max_min_15.tsv") # tab separated 
max_min_15_psv <- read_delim("max_min_15.psv" , delim = "|") # pipe separated 
  1. Use setdiff to check for any differences among
setdiff(max_min_15_csv, max_min_15_psv)
# A tibble: 0 x 3
# ... with 3 variables: country <chr>, code <chr>,
#   annual_co2_emissions_per_capita <dbl>
  1. Reorder country in max_min_15 for plotting and assign to max_min_15_plot_data
max_min_15_plot_data <- max_min_15 %>% 
  mutate(country = reorder(country, annual_co2_emissions_per_capita))
  1. Plot max_min_15_plot_data
ggplot(data = max_min_15_plot_data, 
       mapping = aes(x= annual_co2_emissions_per_capita, y = country)) +
  geom_col() +
  labs(title = "The top 15 and bottom 15 per capita CO2 emissions",
       subtitle = "for 2004",
       x = NULL,
       y = NULL)

  1. Save the plot directory with this post
ggsave(filename = "preview.png", path = here("_posts", "2022-02-19-reading-and-writing-data"))
  1. Add preview.png to yaml chuck at the top of this file.

preview: preview.png