Reading and writing data

A short description of the post.

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

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

Read the data into R and assign it to ‘emissions’

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

emissions <- read_csv(file_csv) 
  1. Show the 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

-use ‘clean_names’ from the janitor to make the names earier to mark with -assign the output to ‘tidy_emissions’ -show the first 10 rows of ‘tidy_emissions’

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 -use ‘filter’ to extract rows with ‘year == 1994’ THEN -use ‘skim’ to calculate the descriptive statistics
tidy_emissions %>% 
 filter(year == 1994) %>% 
 skim()
Table 1: Data summary
Name Piped data
Number of rows 228
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 228 0
code 12 0.95 3 8 0 216 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
year 0 1 1994.00 0.00 1994.00 1994.00 1994.00 1994.00 1994.00 ▁▁▇▁▁
annual_co2_emissions_per_capita 0 1 4.99 6.92 0.02 0.57 2.73 7.36 59.77 ▇▁▁▁▁
  1. 12 observations have a missing code. How are these observations different? -Start with ‘tidy_emissions’ then extract rows with ‘year == 1994’ and are missing a code.
tidy_emissions %>% 
  filter(year == 1994, is.na(code))
# A tibble: 12 x 4
   entity                     code   year annual_co2_emissions_per_ca~
   <chr>                      <chr> <dbl>                        <dbl>
 1 Africa                     <NA>   1994                         1.03
 2 Asia                       <NA>   1994                         2.31
 3 Asia (excl. China & India) <NA>   1994                         3.25
 4 EU-27                      <NA>   1994                         8.46
 5 EU-28                      <NA>   1994                         8.63
 6 Europe                     <NA>   1994                         8.85
 7 Europe (excl. EU-27)       <NA>   1994                         9.36
 8 Europe (excl. EU-28)       <NA>   1994                         9.22
 9 North America              <NA>   1994                        14.1 
10 North America (excl. USA)  <NA>   1994                         5.07
11 Oceania                    <NA>   1994                        11.7 
12 South America              <NA>   1994                         2.11

Entities that are not countries do not have country codes.

  1. Start with tidy_emissions THEN.

    use ‘filter’ to extract rows with year == 1994 and “without” missing codes THEN use ‘select’ to drop the ‘year’ variable THEN use ‘rename’ to change the variable ‘entity’ to ‘country’ assign the output to ‘emissions_1994’

emissions_1994 <- tidy_emissions %>%
 filter(year == 1994, !is.na(code)) %>% 
 select(-year) %>% 
 rename(country = entity)
  1. Which 15 countries have the highest ‘annual_co2_emissions_per_capita’?

start with ‘emissions_1994’ THEN use ‘slice_max’ to extract the 15 rows with the ‘annual_co2_emissions_per_capita’ assign the output to ‘max_15_emitters’

max_15_emitters <- emissions_1994 %>% 
  slice_max(annual_co2_emissions_per_capita, n = 15)
  1. Which 15 countries have the lowest ‘annual_co2_emissions_per_capita’?

start with ‘emissions_1994’ THEN use ‘slice_min’ to extract the 15 rows with the lowest annual_co2_emissions_per_capita’ assign the output to ‘min_15_emitters’

min_15_emitters <- emissions_1994 %>% 
  slice_min(annual_co2_emissions_per_capita, n = 15)
  1. Use ‘bind_rows’ to bind together the ‘max_15_emitters’ and ‘min_15_emitters’ assign the output to ‘max_min_15’
max_min_15 <- bind_rows(max_15_emitters, min_15_emitters)
  1. Export max_min_15 to 3 file 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 values
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 ‘max_min_15_csv’ ‘max_min_15_tsv’ and ‘max_min_15_psv’
setdiff(max_min_15_csv, max_min_15_tsv)
# A tibble: 0 x 3
# ... with 3 variables: country <chr>, code <chr>,
#   annual_co2_emissions_per_capita <dbl>

Are there any differences?

  1. Reorder ‘country’ in ‘max_min_15’ for plotting and assign to max_min_15_plot_data

-Start with ‘emissions_1994’ THEN -use ‘mutate’ to reorder ‘country’ according to ‘annual_co2_emissions_per_capita’

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 1994",
       X = NULL,
       Y = NULL)

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

preview: preview.png