Introduction to Tidyverse

Our work today

  • Introduction

  • Data manegement using dplyr

  • Taming your data using readr

  • Tidy data with tidyR

  • Extra packages

  • Intro to data visualization

If you prefer, the R code for this presentation is available here. The datasets can be downloaded here.

Setting up

After you download our material, please set your working directory to the folder where you saved the material. If you don’t like to set up working directories, Rstudio provide the rprojects tools, that basically connects everything for you from the beggining.

Just go on file>newproject>new_folder and save. Then, put everything in this folder, and you have everything you need to work.

Introduction

The tidyverse is nothing more than a set of R packages built together to help us doing data science in R. The packages all share the same underlying design philosophy, grammar, and data structures. Therefore, if you learn one, the other packages come easier. The main packages of tidyverse are:

  • dplyr: for data manipulation

  • ggplot2: for data visualization

  • tidyr: for modeling and data management

  • purrr: for optimize your code and for functional programming

  • readr: for open and organize the data

Today, we will mostly go over the beautiful world of data management using dplyr, readr, and tidyr. I strongly suggest you to add also ggplot2 to the list of things you should learn how to work with. I provide some extra material about ggplot2 here in the end of this file.

How did I learn all this?

I have four main sources for the things we discuss here:

Why should I use the tidyverse packages?

The main advantages:

  • Easier to perform data management compared to base R

  • Increase readability of your code

  • Integrates well a series of useful package

  • Advanced programmers do, therefore, very likely you get a code full of pipes and tidyverse packages in the future.

Getting ready

Instalattion

# Install from CRAN
install.packages("tidyverse")

# Or the development version from GitHub install.packages('devtools')

devtools::install_github("hadley/tidyverse")
library(tidyverse)
library(conflicted)

Checking conflicts

library(conflicted)
conflict_prefer("select", "dplyr")
conflict_prefer("filter", "dplyr")

The pipe

The packages on tidyverse all rely on using the a shortcut function called %>% from the package magritt. The pipe is your friend, remember that.

The idea behind the pipe is quite simple: you pipe things within each other. The goal is to avoid how R reads codes from inside to outside.

The logic with pipe: first the object, then the functions, and then a sequence of functions. The operator makes it possible to easily chain a sequence of calculations

# Example 1

# In base R

round(exp(diff(log(runif(100, 0, 1)))), 1)

# In pipe

runif(100, 0, 1) %>% log() %>% diff() %>% exp() %>% round(., 1)  # or round(1)
# NOTE HERE: If is a tidyverse function, the data is always the first
# argument, therefore, one doesn't need to add the period. If it is not, one
# must add the period in the data argument

# data %>% function_tidyverse() %>% lm( y~x, data=. )

mtcars %>% lm(mpg ~ cyl, data = .) %>% coef()
(Intercept)         cyl 
   37.88458    -2.87579 
# Example 2: Graph

plot(density(rnorm(1000, 0, 1)))

# With pipe

rnorm(1000, 0, 1) %>% density() %>% plot()

Dplyr for data management

The dplyr is the most famous tidyverse package. It deals with data management. It is my favorite package in the entire R world. I started working with dplyr two years after learning R, and it really made my life easier.

Loading the data

We begin our work using the dataset results. The data has the results of all the international soccer matches from 1872 to 2018. The data can be downloaded here

d <- read_csv("results.csv")

# The first dplyr command: tibble data frame
d <- tbl_df(d)  # Nice to print

d
# A tibble: 39,669 x 9
   date       home_team away_team home_score away_score tournament city 
   <date>     <chr>     <chr>          <int>      <int> <chr>      <chr>
 1 1872-11-30 Scotland  England            0          0 Friendly   Glas~
 2 1873-03-08 England   Scotland           4          2 Friendly   Lond~
 3 1874-03-07 Scotland  England            2          1 Friendly   Glas~
 4 1875-03-06 England   Scotland           2          2 Friendly   Lond~
 5 1876-03-04 Scotland  England            3          0 Friendly   Glas~
 6 1876-03-25 Scotland  Wales              4          0 Friendly   Glas~
 7 1877-03-03 England   Scotland           1          3 Friendly   Lond~
 8 1877-03-05 Wales     Scotland           0          2 Friendly   Wrex~
 9 1878-03-02 Scotland  England            7          2 Friendly   Glas~
10 1878-03-23 Scotland  Wales              9          0 Friendly   Glas~
# ... with 39,659 more rows, and 2 more variables: country <chr>,
#   neutral <lgl>

Functions as verbs.

The most useful

  • select(): select columns
  • mutate(): create new variables, change existing
  • filter(): subset your data by some criterion
  • summarize(): summarize your data in some way
  • group_by(): group your data by a variable
  • slice(): grab specific rows

Some others

  • count(): count your data
  • arrange(): arrange your data by a column or variable
  • distinct(): gather all distinct values of a variable
  • n_distinct(): count how many distinct values you have (only works with summarize)
  • n(): count how many observation you have for a subgroup
  • sample_n(): Grab an N sample of your data
  • sampsle_frac(): Grab a sample that is some fraction of your total data
  • ungroup(): ungroup grouped data by a variable
  • glimpse(): quickly preview the data
  • top_n(): get the top N number of entries from a data frame
  • slice(): grab specific rows

Select : To select collumns

# Base R


d_old <- d[, c("date", "away_score", "home_score")]


# Dplyr

d %>% 
select(., date, home_team, away_team)
# A tibble: 39,669 x 3
   date       home_team away_team
   <date>     <chr>     <chr>    
 1 1872-11-30 Scotland  England  
 2 1873-03-08 England   Scotland 
 3 1874-03-07 Scotland  England  
 4 1875-03-06 England   Scotland 
 5 1876-03-04 Scotland  England  
 6 1876-03-25 Scotland  Wales    
 7 1877-03-03 England   Scotland 
 8 1877-03-05 Wales     Scotland 
 9 1878-03-02 Scotland  England  
10 1878-03-23 Scotland  Wales    
# ... with 39,659 more rows
# OR

d %>% 
select(., 2:3, -5)
# A tibble: 39,669 x 2
   home_team away_team
   <chr>     <chr>    
 1 Scotland  England  
 2 England   Scotland 
 3 Scotland  England  
 4 England   Scotland 
 5 Scotland  England  
 6 Scotland  Wales    
 7 England   Scotland 
 8 Wales     Scotland 
 9 Scotland  England  
10 Scotland  Wales    
# ... with 39,659 more rows

Filter : To select rows

# More than 1.000 favorites

d %>% 
filter(home_team == "Brazil")
# A tibble: 552 x 9
   date       home_team away_team home_score away_score tournament city 
   <date>     <chr>     <chr>          <int>      <int> <chr>      <chr>
 1 1916-07-08 Brazil    Chile              1          1 Copa Amér~ Buen~
 2 1916-07-12 Brazil    Uruguay            1          2 Copa Amér~ Buen~
 3 1917-10-12 Brazil    Chile              5          0 Copa Amér~ Mont~
 4 1919-05-11 Brazil    Chile              6          0 Copa Amér~ Rio ~
 5 1919-05-18 Brazil    Argentina          3          1 Copa Amér~ Rio ~
 6 1919-05-26 Brazil    Uruguay            2          2 Copa Amér~ Rio ~
 7 1919-05-29 Brazil    Uruguay            1          0 Copa Amér~ Rio ~
 8 1919-06-01 Brazil    Argentina          3          3 Friendly   Rio ~
 9 1920-09-18 Brazil    Uruguay            0          6 Copa Amér~ Viña~
10 1921-10-12 Brazil    Paraguay           3          0 Copa Amér~ Buen~
# ... with 542 more rows, and 2 more variables: country <chr>,
#   neutral <lgl>
# Base R

d[d$home_team == "Brazil", ]
# A tibble: 552 x 9
   date       home_team away_team home_score away_score tournament city 
   <date>     <chr>     <chr>          <int>      <int> <chr>      <chr>
 1 1916-07-08 Brazil    Chile              1          1 Copa Amér~ Buen~
 2 1916-07-12 Brazil    Uruguay            1          2 Copa Amér~ Buen~
 3 1917-10-12 Brazil    Chile              5          0 Copa Amér~ Mont~
 4 1919-05-11 Brazil    Chile              6          0 Copa Amér~ Rio ~
 5 1919-05-18 Brazil    Argentina          3          1 Copa Amér~ Rio ~
 6 1919-05-26 Brazil    Uruguay            2          2 Copa Amér~ Rio ~
 7 1919-05-29 Brazil    Uruguay            1          0 Copa Amér~ Rio ~
 8 1919-06-01 Brazil    Argentina          3          3 Friendly   Rio ~
 9 1920-09-18 Brazil    Uruguay            0          6 Copa Amér~ Viña~
10 1921-10-12 Brazil    Paraguay           3          0 Copa Amér~ Buen~
# ... with 542 more rows, and 2 more variables: country <chr>,
#   neutral <lgl>
# Which one do you prefer???


# More than one condition
d %>% 
filter(home_team == "Brazil", home_score - away_score > 0) %>% 
select(date, away_team, tournament)
# A tibble: 395 x 3
   date       away_team tournament  
   <date>     <chr>     <chr>       
 1 1917-10-12 Chile     Copa América
 2 1919-05-11 Chile     Copa América
 3 1919-05-18 Argentina Copa América
 4 1919-05-29 Uruguay   Copa América
 5 1921-10-12 Paraguay  Copa América
 6 1922-10-15 Argentina Copa América
 7 1922-10-22 Paraguay  Copa América
 8 1922-10-22 Argentina Copa Roca   
 9 1922-10-29 Paraguay  Friendly    
10 1923-11-22 Paraguay  Friendly    
# ... with 385 more rows

Mutate: To create new variables

library(conflicted)
conflict_prefer("select", "dplyr")
conflict_prefer("filter", "dplyr")


# Add the difference of goals, and a id for 
# cases when the difference of gols is large,  and select what we did 
# only for Brazil

d %>% 
  
  mutate(dif = abs(away_score - home_score),
            
         goleada = ifelse(dif > 5, "Goleada", "Normal  Result")) %>%
  
    filter(home_team=="Brazil" | away_team=="Brazil",
                 goleada=="Goleada")
# A tibble: 41 x 11
   date       home_team away_team home_score away_score tournament city 
   <date>     <chr>     <chr>          <int>      <int> <chr>      <chr>
 1 1919-05-11 Brazil    Chile              6          0 Copa Amér~ Rio ~
 2 1920-09-18 Brazil    Uruguay            0          6 Copa Amér~ Viña~
 3 1945-02-21 Brazil    Ecuador            9          2 Copa Amér~ Sant~
 4 1949-04-03 Brazil    Ecuador            9          1 Copa Amér~ Rio ~
 5 1949-04-10 Brazil    Bolivia           10          1 Copa Amér~ São ~
 6 1949-04-24 Brazil    Peru               7          1 Copa Amér~ Rio ~
 7 1949-05-11 Brazil    Paraguay           7          0 Copa Amér~ Rio ~
 8 1950-07-09 Brazil    Sweden             7          1 FIFA Worl~ Rio ~
 9 1953-03-01 Bolivia   Brazil             1          8 Copa Amér~ Lima 
10 1956-03-13 Brazil    Costa Ri~          7          1 Pan Ameri~ Mexi~
# ... with 31 more rows, and 4 more variables: country <chr>,
#   neutral <lgl>, dif <int>, goleada <chr>
# NOTE the ifelse is a extremely useful function

#ifelse(condition, TRUE, FALSE)

# Beautiful right?

# Base R 
d_g <- d
d_g$dif <- abs(d$home_score - d$away_score)
d_g$goleada <- ifelse(d_g$dif >5, "Goleada", "NR")
d_g <- d_g[c(d$home_team=="Brazil" | d$away_team=="Brazil")  &
      d_g$goleada==1, c("home_team", "away_score", "goleada", "dif")] 

Arrange: To order de data by a particular variable

# What was the largest difference in gols?

d %>% 
mutate(dif = abs(away_score - home_score)) %>% 
arrange(desc(dif)) %>% 
slice(1)
# A tibble: 1 x 10
  date       home_team away_team home_score away_score tournament city 
  <date>     <chr>     <chr>          <int>      <int> <chr>      <chr>
1 2001-04-11 Australia American~         31          0 FIFA Worl~ Coff~
# ... with 3 more variables: country <chr>, neutral <lgl>, dif <int>

Slice: to slice your data by rows

# The top 5 goleadas?

d %>% 
mutate(dif = abs(away_score - home_score)) %>% 
arrange(desc(dif)) %>% 
slice(1:5)  # top_n(5) here would also do the trick
# A tibble: 5 x 10
  date       home_team away_team home_score away_score tournament city 
  <date>     <chr>     <chr>          <int>      <int> <chr>      <chr>
1 2001-04-11 Australia American~         31          0 FIFA Worl~ Coff~
2 1979-08-30 Fiji      Kiribati          24          0 South Pac~ Naus~
3 2001-04-09 Australia Tonga             22          0 FIFA Worl~ Coff~
4 2005-03-11 Guam      Korea DPR          0         21 EAFF Cham~ Taip~
5 1987-12-15 American~ Papua Ne~          0         20 South Pac~ Noum~
# ... with 3 more variables: country <chr>, neutral <lgl>, dif <int>

Group by + sumarize : forget about loops

  • First: group by a particular variables

  • Second: summarize the data with new statistics.

Summarize: Turn many rows into one.

Examples:

  • min(x) - minimum value of vector x.
  • max(x) - maximum value of vector x.
  • mean(x) - mean value of vector x.
  • median(x) - median value of vector x.
  • quantile(x, p) - pth quantile of vector x.
  • sd(x) - standard deviation of vector x.
  • var(x) - variance of vector x.
  • IQR(x) - Inter Quartile Range (IQR) of vector x.
  • diff(range(x)) - total range of vector x.
# Data on gols scored by home teams

d %>% 
group_by(home_team) %>% 
summarise(mean_home_gols = mean(home_score, na.rm = TRUE), sd_home_gols = sd(home_score), 
    mean_home_gols_op = mean(away_score), count = n()) %>% 
ungroup() %>% 
top_n(., 10, wt = mean_home_gols)  # note here, it does 
# A tibble: 10 x 5
   home_team       mean_home_gols sd_home_gols mean_home_gols_op count
   <chr>                    <dbl>        <dbl>             <dbl> <int>
 1 Cascadia                  4          NaN                0         1
 2 Gotland                   3.35         2.96             2.1      20
 3 Guersney                  3.25         2.51             1.04     24
 4 Kárpátalja                3.4          1.14             1.8       5
 5 Micronesia FS             3.5          4.95             9         2
 6 North Vietnam             3.6          3.13             1.8       5
 7 Northern Cyprus           3.70         3.97             0.609    23
 8 Sápmi                     4.12         5.75             1.5      16
 9 Somaliland                3.5          4.95             2.5       2
10 Western Sahara            3.33         1.53             2.33      3
# not give you in order you can add arrange

Be careful, summarize is not the same as mutate. Check the example below, what is the difference:

d %>% 
group_by(home_team) %>% 
mutate(mean_home_gols = mean(home_score, na.rm = TRUE), sd_home_gols = sd(home_score), 
    mean_home_gols_op = mean(away_score), count = n()) %>% ungroup() %>% 
select(home_team, mean_home_gols) %>% 
top_n(., 10, wt = mean_home_gols)
# A tibble: 16 x 2
   home_team mean_home_gols
   <chr>              <dbl>
 1 Sápmi               4.12
 2 Sápmi               4.12
 3 Sápmi               4.12
 4 Sápmi               4.12
 5 Sápmi               4.12
 6 Sápmi               4.12
 7 Sápmi               4.12
 8 Sápmi               4.12
 9 Sápmi               4.12
10 Sápmi               4.12
11 Sápmi               4.12
12 Sápmi               4.12
13 Sápmi               4.12
14 Sápmi               4.12
15 Sápmi               4.12
16 Sápmi               4.12

You can go crazy, and get combinations using group_by

# Proportion of victories of Brazil on different tournaments against each
# opponent.


d %>% 
filter(home_team == "Brazil") %>% 
mutate(dif = home_score - away_score, victory = ifelse(dif > 0, 1, 0)) %>% 
group_by(away_team, tournament) %>% 
summarise(mean_victory_brazil = mean(victory, na.rm = TRUE), number_games = n()) %>% 
    
filter(away_team == "Argentina")
# A tibble: 7 x 4
# Groups:   away_team [1]
  away_team tournament                   mean_victory_brazil number_games
  <chr>     <chr>                                      <dbl>        <int>
1 Argentina Atlantic Cup                               1                1
2 Argentina Confederations Cup                         1                1
3 Argentina Copa América                               0.7             10
4 Argentina Copa Roca                                  0.538           13
5 Argentina FIFA World Cup                             0                1
6 Argentina FIFA World Cup qualification               1                3
7 Argentina Friendly                                   0.5             16

CHECK IF YOU PREFER A FOR LOOP

d_b <- d[d$home_team == "Brazil", ]
d_b$dif <- d_b$home_score - d_b$away_score
d_b$victory <- ifelse(d_b$dif > 0, 1, 0)
j = 1
i = 1

# Create the container
out <- data_frame()

for (j in 1:unique(d_b$away_team)) {
    for (i in 1:unique(d_b$tournament)) {
        
        res <- d_b[d_b$away_team == unique(d_b$away_team)[j] & d_b$away_team == 
            unique(d_b$tournament)[i], "dif"]
        
    }
}

# I gave up after a few minutes trying

Some other useful functions

Glimpse to see your data

glimpse(d)
Observations: 39,669
Variables: 9
$ date       <date> 1872-11-30, 1873-03-08, 1874-03-07, 1875-03-06, 18...
$ home_team  <chr> "Scotland", "England", "Scotland", "England", "Scot...
$ away_team  <chr> "England", "Scotland", "England", "Scotland", "Engl...
$ home_score <int> 0, 4, 2, 2, 3, 4, 1, 0, 7, 9, 2, 5, 0, 5, 2, 5, 0, ...
$ away_score <int> 0, 2, 1, 2, 0, 0, 3, 2, 2, 0, 1, 4, 3, 4, 3, 1, 1, ...
$ tournament <chr> "Friendly", "Friendly", "Friendly", "Friendly", "Fr...
$ city       <chr> "Glasgow", "London", "Glasgow", "London", "Glasgow"...
$ country    <chr> "Scotland", "England", "Scotland", "England", "Scot...
$ neutral    <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FA...

Count

# Count here is a wrap for group_by and summarize n()

# Basically count the number of rows by group

d %>% 
count(home_team, tournament) %>% 
arrange(desc(n))
# A tibble: 1,710 x 3
   home_team   tournament     n
   <chr>       <chr>      <int>
 1 Germany     Friendly     289
 2 France      Friendly     286
 3 Mexico      Friendly     275
 4 Hungary     Friendly     272
 5 Sweden      Friendly     250
 6 Austria     Friendly     246
 7 Belgium     Friendly     242
 8 Poland      Friendly     241
 9 Netherlands Friendly     239
10 Switzerland Friendly     238
# ... with 1,700 more rows

Select Helper functions

  • starts_with(): starts with a prefix

  • ends_with(): ends with a prefix

  • contains(): contains a literal string

  • matches(): matches a regular expression

  • num_range(): a numerical range like x01, x02, x03.

  • one_of(): variables in character vector.

  • everything(): all variables.

# New Got Data: 

new_got <- read_csv("battles.csv")
glimpse(new_got)
Observations: 38
Variables: 25
$ name               <chr> "Battle of the Golden Tooth", "Battle at th...
$ year               <int> 298, 298, 298, 298, 298, 298, 298, 299, 299...
$ battle_number      <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ...
$ attacker_king      <chr> "Joffrey/Tommen Baratheon", "Joffrey/Tommen...
$ defender_king      <chr> "Robb Stark", "Robb Stark", "Robb Stark", "...
$ attacker_1         <chr> "Lannister", "Lannister", "Lannister", "Sta...
$ attacker_2         <chr> NA, NA, NA, NA, "Tully", "Tully", NA, NA, N...
$ attacker_3         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ attacker_4         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ defender_1         <chr> "Tully", "Baratheon", "Tully", "Lannister",...
$ defender_2         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ defender_3         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ defender_4         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ attacker_outcome   <chr> "win", "win", "win", "loss", "win", "win", ...
$ battle_type        <chr> "pitched battle", "ambush", "pitched battle...
$ major_death        <int> 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1...
$ major_capture      <int> 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1...
$ attacker_size      <int> 15000, NA, 15000, 18000, 1875, 6000, NA, NA...
$ defender_size      <int> 4000, 120, 10000, 20000, 6000, 12625, NA, N...
$ attacker_commander <chr> "Jaime Lannister", "Gregor Clegane", "Jaime...
$ defender_commander <chr> "Clement Piper, Vance", "Beric Dondarrion",...
$ summer             <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
$ location           <chr> "Golden Tooth", "Mummer's Ford", "Riverrun"...
$ region             <chr> "The Westerlands", "The Riverlands", "The R...
$ note               <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "Greyjo...
# Selecting 

new_got %>% 
  
  select(name, year, contains("king"), 
          starts_with("battle")) %>%
           
  glimpse()
Observations: 38
Variables: 6
$ name          <chr> "Battle of the Golden Tooth", "Battle at the Mum...
$ year          <int> 298, 298, 298, 298, 298, 298, 298, 299, 299, 299...
$ attacker_king <chr> "Joffrey/Tommen Baratheon", "Joffrey/Tommen Bara...
$ defender_king <chr> "Robb Stark", "Robb Stark", "Robb Stark", "Joffr...
$ battle_number <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1...
$ battle_type   <chr> "pitched battle", "ambush", "pitched battle", "p...
# Reordering

new_got %>% 
  
  select(name, year, contains("king"), 
          starts_with("battle"), everything()) %>%
           
  glimpse()
Observations: 38
Variables: 25
$ name               <chr> "Battle of the Golden Tooth", "Battle at th...
$ year               <int> 298, 298, 298, 298, 298, 298, 298, 299, 299...
$ attacker_king      <chr> "Joffrey/Tommen Baratheon", "Joffrey/Tommen...
$ defender_king      <chr> "Robb Stark", "Robb Stark", "Robb Stark", "...
$ battle_number      <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ...
$ battle_type        <chr> "pitched battle", "ambush", "pitched battle...
$ attacker_1         <chr> "Lannister", "Lannister", "Lannister", "Sta...
$ attacker_2         <chr> NA, NA, NA, NA, "Tully", "Tully", NA, NA, N...
$ attacker_3         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ attacker_4         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ defender_1         <chr> "Tully", "Baratheon", "Tully", "Lannister",...
$ defender_2         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ defender_3         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ defender_4         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ attacker_outcome   <chr> "win", "win", "win", "loss", "win", "win", ...
$ major_death        <int> 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1...
$ major_capture      <int> 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1...
$ attacker_size      <int> 15000, NA, 15000, 18000, 1875, 6000, NA, NA...
$ defender_size      <int> 4000, 120, 10000, 20000, 6000, 12625, NA, N...
$ attacker_commander <chr> "Jaime Lannister", "Gregor Clegane", "Jaime...
$ defender_commander <chr> "Clement Piper, Vance", "Beric Dondarrion",...
$ summer             <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
$ location           <chr> "Golden Tooth", "Mummer's Ford", "Riverrun"...
$ region             <chr> "The Westerlands", "The Riverlands", "The R...
$ note               <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "Greyjo...
# Deleting some not relevant information
new_got %>% 
  
  select(name, year, contains("king"), 
         
          starts_with("battle"), everything(), 
         
         -matches(c("1$|2$|3$|4$"))) %>%
           
  glimpse()
Observations: 38
Variables: 17
$ name               <chr> "Battle of the Golden Tooth", "Battle at th...
$ year               <int> 298, 298, 298, 298, 298, 298, 298, 299, 299...
$ attacker_king      <chr> "Joffrey/Tommen Baratheon", "Joffrey/Tommen...
$ defender_king      <chr> "Robb Stark", "Robb Stark", "Robb Stark", "...
$ battle_number      <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ...
$ battle_type        <chr> "pitched battle", "ambush", "pitched battle...
$ attacker_outcome   <chr> "win", "win", "win", "loss", "win", "win", ...
$ major_death        <int> 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1...
$ major_capture      <int> 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1...
$ attacker_size      <int> 15000, NA, 15000, 18000, 1875, 6000, NA, NA...
$ defender_size      <int> 4000, 120, 10000, 20000, 6000, 12625, NA, N...
$ attacker_commander <chr> "Jaime Lannister", "Gregor Clegane", "Jaime...
$ defender_commander <chr> "Clement Piper, Vance", "Beric Dondarrion",...
$ summer             <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
$ location           <chr> "Golden Tooth", "Mummer's Ford", "Riverrun"...
$ region             <chr> "The Westerlands", "The Riverlands", "The R...
$ note               <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, "Greyjo...

Taming your data using readr

The idea of taming your data sounds fancy, but it is basically getting your columns on the right format. For this, the tidyverse packages are extremely useful. Here, we will be using the packages `

Functions to import data

  • read_csv(): comma separated (CSV) files
  • read_tsv(): tab separated files
  • read_delim(): general delimited files
  • read_fwf(): fixed width files
  • read_table(): tabular files where columns are separated by white-space.
  • read_log(): web log files

Functions to Tame your data: Parse Family

  • parse_logical

  • parse_integer

  • parse_factor

  • parse_character

  • parse_date

You can you this function to fix and to identify problems on your variables.

# Numeric
x <- c("1", "2", "3")
parse_number(x)
[1] 1 2 3
# Character

names <- c("Tiago", "Augusto", "ventura", 3)
parse_character(names)
[1] "Tiago"   "Augusto" "ventura" "3"      
# Or date

parse_date("30 december 1988", format = "%d %B %y")
[1] NA
parse_date("30 december 1988", format = "%d %B %Y")
[1] "1988-12-30"
# More interesting: Return the error for you

x <- c("1", "2", "3", "tiago")
parse_number(x)
[1]  1  2  3 NA
attr(,"problems")
# A tibble: 1 x 4
    row   col expected actual
  <int> <int> <chr>    <chr> 
1     4    NA a number tiago 
# Also

x <- c("10%", "$1000", "10 reais")
parse_number(x)
[1]   10 1000   10

You can use all the parse functions when opening your data just replacing parse_* by col_*

got_cd <- read_csv("character-deaths.csv")
glimpse(got_cd)
Observations: 917
Variables: 13
$ name          <chr> "Addam Marbrand", "Aegon Frey (Jinglebell)", "Ae...
$ Allegiances   <chr> "Lannister", "None", "House Targaryen", "House G...
$ Death_y       <chr> "na", "299", NA, "300", NA, NA, "300", "300", NA...
$ Book_Death    <chr> NA, "3", "na", "5", NA, NA, "4", "5", NA, NA, "2...
$ Death_Chapter <chr> NA, "51", ".", "20", NA, NA, "35", NA, NA, NA, "...
$ Book_Intro    <chr> "56", "49", "5", "20", ",", NA, "21", "59", "11"...
$ Gender        <int> 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, ...
$ Nobility      <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, ...
$ GoT           <int> 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, ...
$ CoK           <int> 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, ...
$ SoS           <int> 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, ...
$ FfC           <int> 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, ...
$ DwD           <int> 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, ...

Some numerical variables come out as characters

# Fix

got_cd <- read_csv("character-deaths.csv", col_types = cols(Death_y = col_number(), 
    Book_Death = col_number(), Death_Chapter = col_number(), Book_Intro = col_number()))

glimpse(got_cd)
Observations: 917
Variables: 13
$ name          <chr> "Addam Marbrand", "Aegon Frey (Jinglebell)", "Ae...
$ Allegiances   <chr> "Lannister", "None", "House Targaryen", "House G...
$ Death_y       <dbl> NA, 299, NA, 300, NA, NA, 300, 300, NA, NA, 299,...
$ Book_Death    <dbl> NA, 3, NA, 5, NA, NA, 4, 5, NA, NA, 2, NA, 5, NA...
$ Death_Chapter <dbl> NA, 51, NA, 20, NA, NA, 35, NA, NA, NA, 56, NA, ...
$ Book_Intro    <dbl> 56, 49, 5, 20, NA, NA, 21, 59, 11, 0, 50, 54, 18...
$ Gender        <int> 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, ...
$ Nobility      <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, ...
$ GoT           <int> 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, ...
$ CoK           <int> 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, ...
$ SoS           <int> 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, ...
$ FfC           <int> 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, ...
$ DwD           <int> 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, ...
# Check the problem

problems(got_cd)
# A tibble: 4 x 5
    row col           expected actual file                  
  <int> <chr>         <chr>    <chr>  <chr>                 
1     1 Death_y       a number na     'character-deaths.csv'
2     3 Book_Death    a number na     'character-deaths.csv'
3     3 Death_Chapter a number .      'character-deaths.csv'
4     5 Book_Intro    a number ,      'character-deaths.csv'
# Proper Fix
got_cd <- read_csv("character-deaths.csv", col_types = cols(Death_y = col_number(), 
    Book_Death = col_number(), Death_Chapter = col_number(), Book_Intro = col_number()), 
    na = c("", "NA", "na", ".", ","))

got_cd
# A tibble: 917 x 13
   name  Allegiances Death_y Book_Death Death_Chapter Book_Intro Gender
   <chr> <chr>         <dbl>      <dbl>         <dbl>      <dbl>  <int>
 1 Adda~ Lannister        NA         NA            NA         56      1
 2 Aego~ None            299          3            51         49      1
 3 Aego~ House Targ~      NA         NA            NA          5      1
 4 Adra~ House Grey~     300          5            20         20      1
 5 Aemo~ Lannister        NA         NA            NA         NA      1
 6 Aemo~ Baratheon        NA         NA            NA         NA      1
 7 Aemo~ Night's Wa~     300          4            35         21      1
 8 Aeny~ None            300          5            NA         59      0
 9 Aero~ House Grey~      NA         NA            NA         11      1
10 Aeth~ Night's Wa~      NA         NA            NA          0      1
# ... with 907 more rows, and 6 more variables: Nobility <int>, GoT <int>,
#   CoK <int>, SoS <int>, FfC <int>, DwD <int>

Tidy Data using tidyR

Tidy data is a fancy name for data in the long format. A data is tidy when:

  1. Each variable must have its own column.

  2. Each observation must have its own row.

Untidy data

date home_team away_team Atlantic Cup Brazil Independence Cup Confederations Cup Copa América Copa Bernardo O’Higgins Copa Oswaldo Cruz Copa Rio Branco Copa Roca FIFA World Cup FIFA World Cup qualification Friendly Gold Cup Mundialito Pan American Championship USA Cup
1916-07-08 Brazil Chile NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1916-07-12 Brazil Uruguay NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
1917-10-12 Brazil Chile NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
1919-05-11 Brazil Chile NA NA NA 6 NA NA NA NA NA NA NA NA NA NA NA
1919-05-18 Brazil Argentina NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1919-05-26 Brazil Uruguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1919-05-29 Brazil Uruguay NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1919-06-01 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1920-09-18 Brazil Uruguay NA NA NA -6 NA NA NA NA NA NA NA NA NA NA NA
1921-10-12 Brazil Paraguay NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1921-10-23 Brazil Uruguay NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
1922-09-17 Brazil Chile NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1922-09-24 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1922-10-01 Brazil Uruguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1922-10-15 Brazil Argentina NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1922-10-22 Brazil Argentina NA NA NA NA NA NA NA 1 NA NA NA NA NA NA NA
1922-10-22 Brazil Paraguay NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1922-10-29 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1923-11-11 Brazil Paraguay NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
1923-11-22 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1925-12-06 Brazil Paraguay NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1925-12-17 Brazil Paraguay NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1930-07-14 Brazil Yugoslavia NA NA NA NA NA NA NA NA -1 NA NA NA NA NA NA
1930-08-01 Brazil France NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1930-08-10 Brazil Yugoslavia NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1930-08-17 Brazil USA NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1931-09-06 Brazil Uruguay NA NA NA NA NA NA 2 NA NA NA NA NA NA NA NA
1934-05-27 Brazil Spain NA NA NA NA NA NA NA NA -2 NA NA NA NA NA NA
1936-12-27 Brazil Peru NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1937-01-03 Brazil Chile NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1937-01-13 Brazil Paraguay NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
1937-01-19 Brazil Uruguay NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1938-06-05 Brazil Poland NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1938-06-12 Brazil Czechoslovakia NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1938-06-14 Brazil Czechoslovakia NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1938-06-16 Brazil Italy NA NA NA NA NA NA NA NA -1 NA NA NA NA NA NA
1938-06-19 Brazil Sweden NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1939-01-15 Brazil Argentina NA NA NA NA NA NA NA -4 NA NA NA NA NA NA NA
1939-01-22 Brazil Argentina NA NA NA NA NA NA NA 1 NA NA NA NA NA NA NA
1940-02-18 Brazil Argentina NA NA NA NA NA NA NA 0 NA NA NA NA NA NA NA
1940-02-25 Brazil Argentina NA NA NA NA NA NA NA -3 NA NA NA NA NA NA NA
1940-03-24 Brazil Uruguay NA NA NA NA NA NA -1 NA NA NA NA NA NA NA NA
1940-03-31 Brazil Uruguay NA NA NA NA NA NA 0 NA NA NA NA NA NA NA NA
1942-01-14 Brazil Chile NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
1942-01-21 Brazil Peru NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1942-01-31 Brazil Ecuador NA NA NA 4 NA NA NA NA NA NA NA NA NA NA NA
1942-02-05 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1944-05-14 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
1944-05-17 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1945-01-21 Brazil Colombia NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1945-02-07 Brazil Uruguay NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1945-02-21 Brazil Ecuador NA NA NA 7 NA NA NA NA NA NA NA NA NA NA NA
1945-12-16 Brazil Argentina NA NA NA NA NA NA NA -1 NA NA NA NA NA NA NA
1945-12-20 Brazil Argentina NA NA NA NA NA NA NA 4 NA NA NA NA NA NA NA
1945-12-23 Brazil Argentina NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA
1946-01-23 Brazil Uruguay NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1946-01-29 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1946-02-03 Brazil Chile NA NA NA 4 NA NA NA NA NA NA NA NA NA NA NA
1947-04-01 Brazil Uruguay NA NA NA NA NA NA 1 NA NA NA NA NA NA NA NA
1949-04-03 Brazil Ecuador NA NA NA 8 NA NA NA NA NA NA NA NA NA NA NA
1949-04-10 Brazil Bolivia NA NA NA 9 NA NA NA NA NA NA NA NA NA NA NA
1949-04-13 Brazil Chile NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1949-04-17 Brazil Colombia NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
1949-04-24 Brazil Peru NA NA NA 6 NA NA NA NA NA NA NA NA NA NA NA
1949-04-30 Brazil Uruguay NA NA NA 4 NA NA NA NA NA NA NA NA NA NA NA
1949-05-08 Brazil Paraguay NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
1949-05-11 Brazil Paraguay NA NA NA 7 NA NA NA NA NA NA NA NA NA NA NA
1950-05-06 Brazil Uruguay NA NA NA NA NA NA -1 NA NA NA NA NA NA NA NA
1950-05-07 Brazil Paraguay NA NA NA NA NA 2 NA NA NA NA NA NA NA NA NA
1950-05-13 Brazil Paraguay NA NA NA NA NA 0 NA NA NA NA NA NA NA NA NA
1950-05-14 Brazil Uruguay NA NA NA NA NA NA 1 NA NA NA NA NA NA NA NA
1950-06-24 Brazil Mexico NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA
1950-06-28 Brazil Switzerland NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1950-07-01 Brazil Yugoslavia NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1950-07-09 Brazil Sweden NA NA NA NA NA NA NA NA 6 NA NA NA NA NA NA
1950-07-13 Brazil Spain NA NA NA NA NA NA NA NA 5 NA NA NA NA NA NA
1950-07-16 Brazil Uruguay NA NA NA NA NA NA NA NA -1 NA NA NA NA NA NA
1952-04-06 Brazil Mexico NA NA NA NA NA NA NA NA NA NA NA NA NA 2 NA
1952-04-10 Brazil Peru NA NA NA NA NA NA NA NA NA NA NA NA NA 0 NA
1952-04-13 Brazil Panama NA NA NA NA NA NA NA NA NA NA NA NA NA 5 NA
1952-04-16 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA NA NA NA 2 NA
1953-03-12 Brazil Ecuador NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1953-03-15 Brazil Uruguay NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1953-03-23 Brazil Chile NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1953-03-27 Brazil Paraguay NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
1953-04-01 Brazil Paraguay NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
1954-03-14 Brazil Chile NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
1954-06-16 Brazil Mexico NA NA NA NA NA NA NA NA 5 NA NA NA NA NA NA
1954-06-19 Brazil Yugoslavia NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1954-06-27 Brazil Hungary NA NA NA NA NA NA NA NA -2 NA NA NA NA NA NA
1955-09-18 Brazil Chile NA NA NA NA 0 NA NA NA NA NA NA NA NA NA NA
1955-09-20 Brazil Chile NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA
1955-11-13 Brazil Paraguay NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA
1955-11-17 Brazil Paraguay NA NA NA NA NA 0 NA NA NA NA NA NA NA NA NA
1956-01-24 Brazil Chile NA NA NA -3 NA NA NA NA NA NA NA NA NA NA NA
1956-01-29 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1956-02-01 Brazil Peru NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1956-03-01 Brazil Chile NA NA NA NA NA NA NA NA NA NA NA NA NA 1 NA
1956-03-06 Brazil Peru NA NA NA NA NA NA NA NA NA NA NA NA NA 1 NA
1956-03-13 Brazil Costa Rica NA NA NA NA NA NA NA NA NA NA NA NA NA 6 NA
1956-06-24 Brazil Uruguay 2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
1956-07-01 Brazil Italy NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1956-08-05 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
1956-08-08 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1957-03-13 Brazil Chile NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1957-03-21 Brazil Ecuador NA NA NA 6 NA NA NA NA NA NA NA NA NA NA NA
1957-03-24 Brazil Colombia NA NA NA 9 NA NA NA NA NA NA NA NA NA NA NA
1957-03-28 Brazil Uruguay NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
1957-04-21 Brazil Peru NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
1957-06-11 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1957-06-16 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1957-07-07 Brazil Argentina NA NA NA NA NA NA NA -1 NA NA NA NA NA NA NA
1957-07-10 Brazil Argentina NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA
1958-05-04 Brazil Paraguay NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA
1958-05-07 Brazil Paraguay NA NA NA NA NA 0 NA NA NA NA NA NA NA NA NA
1958-05-14 Brazil Bulgaria NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1958-05-18 Brazil Bulgaria NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1958-06-11 Brazil England NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1958-06-15 Brazil Russia NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1958-06-19 Brazil Wales NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1958-06-24 Brazil France NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
1959-03-10 Brazil Peru NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1959-03-15 Brazil Chile NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1959-03-26 Brazil Uruguay NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1959-03-29 Brazil Paraguay NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1959-05-13 Brazil England NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1959-09-17 Brazil Chile NA NA NA NA 7 NA NA NA NA NA NA NA NA NA NA
1959-09-20 Brazil Chile NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA
1959-12-05 Brazil Paraguay NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1959-12-12 Brazil Uruguay NA NA NA -3 NA NA NA NA NA NA NA NA NA NA NA
1960-03-06 Brazil Mexico NA NA NA NA NA NA NA NA NA NA NA NA NA 0 NA
1960-03-15 Brazil Mexico NA NA NA NA NA NA NA NA NA NA NA NA NA 1 NA
1960-06-29 Brazil Chile NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1960-07-12 Brazil Argentina 4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
1961-06-29 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1962-04-21 Brazil Paraguay NA NA NA NA NA 6 NA NA NA NA NA NA NA NA NA
1962-04-24 Brazil Paraguay NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA
1962-05-06 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1962-05-09 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1962-05-12 Brazil Wales NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1962-05-16 Brazil Wales NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1962-05-30 Brazil Mexico NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1962-06-02 Brazil Czechoslovakia NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1962-06-06 Brazil Spain NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1962-06-10 Brazil England NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1962-06-17 Brazil Czechoslovakia NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1963-03-10 Brazil Peru NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1963-03-14 Brazil Colombia NA NA NA 4 NA NA NA NA NA NA NA NA NA NA NA
1963-03-17 Brazil Paraguay NA NA NA -2 NA NA NA NA NA NA NA NA NA NA NA
1963-03-27 Brazil Ecuador NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1963-04-13 Brazil Argentina NA NA NA NA NA NA NA -1 NA NA NA NA NA NA NA
1963-04-16 Brazil Argentina NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA
1964-05-30 Brazil England NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1964-06-03 Brazil Argentina NA NA NA NA NA NA NA NA NA NA -3 NA NA NA NA
1964-06-07 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1965-06-02 Brazil Belgium NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
1965-06-06 Brazil Germany NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1965-06-09 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1965-09-07 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1965-11-21 Brazil Hungary NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1965-11-21 Brazil Russia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1966-05-14 Brazil Wales NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1966-05-15 Brazil Chile NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1966-05-18 Brazil Wales NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1966-05-19 Brazil Chile NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1966-06-04 Brazil Peru NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1966-06-05 Brazil Poland NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1966-06-08 Brazil Peru NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1966-06-08 Brazil Poland NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1966-06-12 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1966-06-15 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1966-07-12 Brazil Bulgaria NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1966-07-15 Brazil Hungary NA NA NA NA NA NA NA NA -2 NA NA NA NA NA NA
1966-07-19 Brazil Portugal NA NA NA NA NA NA NA NA -2 NA NA NA NA NA NA
1968-06-09 Brazil Uruguay NA NA NA NA NA NA 2 NA NA NA NA NA NA NA NA
1968-06-12 Brazil Uruguay NA NA NA NA NA NA 4 NA NA NA NA NA NA NA NA
1968-08-07 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1968-08-11 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1968-10-31 Brazil Mexico NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
1968-11-03 Brazil Mexico NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1968-12-14 Brazil Germany NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1968-12-17 Brazil Yugoslavia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1968-12-19 Brazil Yugoslavia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1969-04-07 Brazil Peru NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1969-04-09 Brazil Peru NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1969-06-12 Brazil England NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1969-08-21 Brazil Colombia NA NA NA NA NA NA NA NA NA 4 NA NA NA NA NA
1969-08-24 Brazil Venezuela NA NA NA NA NA NA NA NA NA 6 NA NA NA NA NA
1969-08-31 Brazil Paraguay NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
1970-03-04 Brazil Argentina NA NA NA NA NA NA NA NA NA NA -2 NA NA NA NA
1970-03-08 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1970-03-22 Brazil Chile NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
1970-03-26 Brazil Chile NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1970-04-12 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1970-04-29 Brazil Austria NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1970-06-03 Brazil Czechoslovakia NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
1970-06-07 Brazil England NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1970-06-10 Brazil Romania NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1970-06-14 Brazil Peru NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1970-06-17 Brazil Uruguay NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1970-06-21 Brazil Italy NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
1970-09-30 Brazil Mexico NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1971-07-11 Brazil Austria NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1971-07-14 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1971-07-18 Brazil Yugoslavia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1971-07-24 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1972-04-26 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1972-06-28 Brazil Czechoslovakia NA 0 NA NA NA NA NA NA NA NA NA NA NA NA NA
1972-07-02 Brazil Yugoslavia NA 3 NA NA NA NA NA NA NA NA NA NA NA NA NA
1972-07-05 Brazil Scotland NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA
1972-07-09 Brazil Portugal NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA
1973-05-27 Brazil Bolivia NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
1974-03-31 Brazil Mexico NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1974-04-07 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1974-04-14 Brazil Bulgaria NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1974-04-17 Brazil Romania NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1974-04-21 Brazil Haiti NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1974-04-28 Brazil Greece NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1974-05-01 Brazil Austria NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1974-05-05 Brazil Ireland NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1974-05-12 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1974-06-13 Brazil Yugoslavia NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1974-06-26 Brazil German DR NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1974-07-06 Brazil Poland NA NA NA NA NA NA NA NA -1 NA NA NA NA NA NA
1975-03-09 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1975-08-06 Brazil Argentina NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1975-08-13 Brazil Venezuela NA NA NA 6 NA NA NA NA NA NA NA NA NA NA NA
1975-09-30 Brazil Peru NA NA NA -2 NA NA NA NA NA NA NA NA NA NA NA
1976-04-28 Brazil Uruguay NA NA NA NA NA NA 1 NA NA NA NA NA NA NA NA
1976-05-19 Brazil Argentina NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA
1976-05-23 Brazil England NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1976-05-31 Brazil Italy NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1976-06-09 Brazil Paraguay NA NA NA NA NA 2 NA NA NA NA NA NA NA NA NA
1976-12-01 Brazil Russia NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1977-01-23 Brazil Bulgaria NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1977-03-09 Brazil Colombia NA NA NA NA NA NA NA NA NA 6 NA NA NA NA NA
1977-03-20 Brazil Paraguay NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
1977-06-08 Brazil England NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1977-06-12 Brazil Germany NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1977-06-19 Brazil Poland NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1977-06-23 Brazil Scotland NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1977-06-26 Brazil Yugoslavia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1977-06-30 Brazil France NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1977-07-14 Brazil Bolivia NA NA NA NA NA NA NA NA NA 8 NA NA NA NA NA
1978-05-01 Brazil Peru NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1978-05-17 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1978-06-03 Brazil Sweden NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1978-06-07 Brazil Spain NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1978-06-14 Brazil Peru NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
1978-06-21 Brazil Poland NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1978-06-24 Brazil Italy NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1979-05-17 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 6 NA NA NA NA
1979-05-31 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1979-08-02 Brazil Argentina NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1979-08-16 Brazil Bolivia NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1979-10-31 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1980-06-08 Brazil Mexico NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1980-06-15 Brazil Russia NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
1980-06-24 Brazil Chile NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1980-06-29 Brazil Poland NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1980-08-27 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1980-10-30 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 6 NA NA NA NA
1980-12-21 Brazil Switzerland NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1981-01-07 Brazil Germany NA NA NA NA NA NA NA NA NA NA NA NA 3 NA NA
1981-03-14 Brazil Chile NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1981-03-22 Brazil Bolivia NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
1981-03-29 Brazil Venezuela NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA
1981-07-08 Brazil Spain NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1981-10-28 Brazil Bulgaria NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1982-01-26 Brazil German DR NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1982-03-03 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1982-03-21 Brazil Germany NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1982-05-05 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1982-05-19 Brazil Switzerland NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1982-05-27 Brazil Ireland NA NA NA NA NA NA NA NA NA NA 7 NA NA NA NA
1982-06-14 Brazil Russia NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1982-06-18 Brazil Scotland NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
1982-06-23 Brazil New Zealand NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA
1983-04-28 Brazil Chile NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1983-09-01 Brazil Ecuador NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
1983-09-14 Brazil Argentina NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1983-10-20 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1983-11-04 Brazil Uruguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1984-06-10 Brazil England NA NA NA NA NA NA NA NA NA NA -2 NA NA NA NA
1984-06-17 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1984-06-21 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1985-04-25 Brazil Colombia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1985-04-28 Brazil Peru NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
1985-05-02 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1985-05-05 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1985-06-08 Brazil Chile NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1985-06-23 Brazil Paraguay NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
1985-06-30 Brazil Bolivia NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
1986-04-01 Brazil Peru NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1986-04-08 Brazil German DR NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1986-04-17 Brazil Finland NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1986-04-30 Brazil Yugoslavia NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1986-05-07 Brazil Chile NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1986-06-06 Brazil Algeria NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1986-06-16 Brazil Poland NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA
1986-06-21 Brazil France NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1987-06-21 Brazil Ecuador NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1987-06-28 Brazil Venezuela NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
1987-12-09 Brazil Chile NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1987-12-12 Brazil Germany NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1988-07-13 Brazil Saudi Arabia NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1989-03-15 Brazil Ecuador NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1989-04-12 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1989-05-10 Brazil Peru NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1989-06-08 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1989-06-16 Brazil Sweden NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
1989-07-01 Brazil Venezuela NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1989-07-03 Brazil Peru NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1989-07-07 Brazil Colombia NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1989-07-09 Brazil Paraguay NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1989-07-12 Brazil Argentina NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1989-07-14 Brazil Paraguay NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1989-07-16 Brazil Uruguay NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1989-07-23 Brazil Japan NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1989-08-20 Brazil Venezuela NA NA NA NA NA NA NA NA NA 6 NA NA NA NA NA
1989-09-03 Brazil Chile NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
1989-11-14 Brazil Yugoslavia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1990-05-05 Brazil Bulgaria NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1990-05-13 Brazil German DR NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1990-06-10 Brazil Sweden NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1990-06-16 Brazil Costa Rica NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1990-06-20 Brazil Scotland NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1990-06-24 Brazil Argentina NA NA NA NA NA NA NA NA -1 NA NA NA NA NA NA
1990-11-08 Brazil Chile NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1991-02-27 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1991-05-28 Brazil Bulgaria NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1991-06-27 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1991-07-11 Brazil Uruguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1991-07-13 Brazil Colombia NA NA NA -2 NA NA NA NA NA NA NA NA NA NA NA
1991-07-15 Brazil Ecuador NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1991-07-19 Brazil Colombia NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1991-10-30 Brazil Yugoslavia NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1991-12-18 Brazil Czechoslovakia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1992-02-26 Brazil USA NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1992-04-15 Brazil Finland NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1992-07-31 Brazil Mexico NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
1992-09-23 Brazil Costa Rica NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1992-11-25 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
1992-12-16 Brazil Germany NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1993-03-17 Brazil Poland NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1993-06-10 Brazil Germany NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0
1993-06-13 Brazil England NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0
1993-06-18 Brazil Peru NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1993-06-21 Brazil Chile NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
1993-06-24 Brazil Paraguay NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1993-06-27 Brazil Argentina NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1993-07-14 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1993-08-08 Brazil Mexico NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1993-08-22 Brazil Ecuador NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
1993-08-29 Brazil Bolivia NA NA NA NA NA NA NA NA NA 6 NA NA NA NA NA
1993-09-05 Brazil Venezuela NA NA NA NA NA NA NA NA NA 4 NA NA NA NA NA
1993-09-19 Brazil Uruguay NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
1994-03-23 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1994-05-04 Brazil Iceland NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1994-06-20 Brazil Russia NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
1994-06-24 Brazil Cameroon NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
1994-06-28 Brazil Sweden NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1994-07-17 Brazil Italy NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1994-12-23 Brazil Serbia NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1995-02-22 Brazil Slovakia NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
1995-03-29 Brazil Honduras NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1995-06-04 Brazil Sweden NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1995-06-06 Brazil Japan NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1995-07-07 Brazil Ecuador NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1995-07-10 Brazil Peru NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1995-07-13 Brazil Colombia NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1995-07-17 Brazil Argentina NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
1995-10-11 Brazil Uruguay NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1995-12-20 Brazil Colombia NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1996-01-12 Brazil Canada NA NA NA NA NA NA NA NA NA NA NA 3 NA NA NA
1996-03-27 Brazil Ghana NA NA NA NA NA NA NA NA NA NA 6 NA NA NA NA
1996-10-16 Brazil Lithuania NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1996-11-13 Brazil Cameroon NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1996-12-18 Brazil Bosnia-Herzegovina NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
1997-02-26 Brazil Poland NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1997-04-02 Brazil Chile NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1997-04-30 Brazil Mexico NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1997-06-13 Brazil Costa Rica NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
1997-06-16 Brazil Mexico NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1997-06-19 Brazil Colombia NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1997-06-22 Brazil Paraguay NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
1997-06-26 Brazil Peru NA NA NA 7 NA NA NA NA NA NA NA NA NA NA NA
1997-09-10 Brazil Ecuador NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1997-10-09 Brazil Morocco NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1997-11-11 Brazil Wales NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1997-12-16 Brazil Mexico NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA
1997-12-19 Brazil Czech Republic NA NA 2 NA NA NA NA NA NA NA NA NA NA NA NA
1997-12-21 Brazil Australia NA NA 6 NA NA NA NA NA NA NA NA NA NA NA NA
1998-02-03 Brazil Jamaica NA NA NA NA NA NA NA NA NA NA NA 0 NA NA NA
1998-02-05 Brazil Guatemala NA NA NA NA NA NA NA NA NA NA NA 0 NA NA NA
1998-02-15 Brazil Jamaica NA NA NA NA NA NA NA NA NA NA NA 1 NA NA NA
1998-04-29 Brazil Argentina NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
1998-06-10 Brazil Scotland NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1998-06-16 Brazil Morocco NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
1998-06-23 Brazil Norway NA NA NA NA NA NA NA NA -1 NA NA NA NA NA NA
1998-06-27 Brazil Chile NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
1998-07-03 Brazil Denmark NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
1998-07-07 Brazil Netherlands NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
1998-09-23 Brazil Serbia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1998-10-14 Brazil Ecuador NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1998-11-18 Brazil Russia NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
1999-06-05 Brazil Netherlands NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
1999-06-08 Brazil Netherlands NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1999-06-16 Brazil Poland NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
1999-06-26 Brazil Latvia NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
1999-06-30 Brazil Venezuela NA NA NA 7 NA NA NA NA NA NA NA NA NA NA NA
1999-07-03 Brazil Mexico NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1999-07-06 Brazil Chile NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1999-07-11 Brazil Argentina NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
1999-07-18 Brazil Uruguay NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
1999-07-24 Brazil Germany NA NA 4 NA NA NA NA NA NA NA NA NA NA NA NA
1999-07-28 Brazil USA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA
1999-08-01 Brazil Saudi Arabia NA NA 6 NA NA NA NA NA NA NA NA NA NA NA NA
1999-09-07 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2000-04-26 Brazil Ecuador NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
2000-06-28 Brazil Uruguay NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
2000-07-26 Brazil Argentina NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
2000-09-03 Brazil Bolivia NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA
2000-11-15 Brazil Colombia NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
2001-04-25 Brazil Peru NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
2001-05-31 Brazil Cameroon NA NA 2 NA NA NA NA NA NA NA NA NA NA NA NA
2001-07-12 Brazil Mexico NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
2001-07-15 Brazil Peru NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
2001-07-18 Brazil Paraguay NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
2001-07-23 Brazil Honduras NA NA NA -2 NA NA NA NA NA NA NA NA NA NA NA
2001-08-09 Brazil Panama NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
2001-08-15 Brazil Paraguay NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
2001-10-07 Brazil Chile NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
2001-11-14 Brazil Venezuela NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
2002-01-31 Brazil Bolivia NA NA NA NA NA NA NA NA NA NA 6 NA NA NA NA
2002-03-07 Brazil Iceland NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA
2002-03-27 Brazil Serbia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2002-06-03 Brazil Turkey NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
2002-06-08 Brazil China NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA
2002-06-17 Brazil Belgium NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
2002-06-26 Brazil Turkey NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
2002-08-21 Brazil Paraguay NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
2003-06-19 Brazil Cameroon NA NA -1 NA NA NA NA NA NA NA NA NA NA NA NA
2003-06-21 Brazil USA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA
2003-06-23 Brazil Turkey NA NA 0 NA NA NA NA NA NA NA NA NA NA NA NA
2003-07-15 Brazil Honduras NA NA NA NA NA NA NA NA NA NA NA 1 NA NA NA
2003-09-10 Brazil Ecuador NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
2003-10-12 Brazil Jamaica NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2003-11-19 Brazil Uruguay NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
2004-06-02 Brazil Argentina NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
2004-07-08 Brazil Chile NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
2004-07-11 Brazil Costa Rica NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
2004-07-14 Brazil Paraguay NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
2004-09-05 Brazil Bolivia NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
2004-10-13 Brazil Colombia NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
2005-03-27 Brazil Peru NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
2005-04-27 Brazil Guatemala NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
2005-06-05 Brazil Paraguay NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
2005-06-16 Brazil Greece NA NA 3 NA NA NA NA NA NA NA NA NA NA NA NA
2005-06-29 Brazil Argentina NA NA 3 NA NA NA NA NA NA NA NA NA NA NA NA
2005-09-04 Brazil Chile NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA
2005-10-12 Brazil Venezuela NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
2006-06-04 Brazil New Zealand NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
2006-06-13 Brazil Croatia NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
2006-06-18 Brazil Australia NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
2006-06-27 Brazil Ghana NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
2006-07-01 Brazil France NA NA NA NA NA NA NA NA -1 NA NA NA NA NA NA
2006-10-10 Brazil Ecuador NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2007-03-24 Brazil Chile NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
2007-03-27 Brazil Ghana NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2007-06-27 Brazil Mexico NA NA NA -2 NA NA NA NA NA NA NA NA NA NA NA
2007-07-01 Brazil Chile NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
2007-07-04 Brazil Ecuador NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
2007-07-15 Brazil Argentina NA NA NA 3 NA NA NA NA NA NA NA NA NA NA NA
2007-10-17 Brazil Ecuador NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA
2007-11-21 Brazil Uruguay NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
2008-03-26 Brazil Sweden NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2008-05-31 Brazil Canada NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2008-06-06 Brazil Venezuela NA NA NA NA NA NA NA NA NA NA -2 NA NA NA NA
2008-09-10 Brazil Bolivia NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
2008-10-15 Brazil Colombia NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
2008-11-19 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
2009-02-10 Brazil Italy NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2009-06-10 Brazil Paraguay NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
2009-06-15 Brazil Egypt NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA
2009-10-14 Brazil Venezuela NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
2009-11-14 Brazil England NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2010-06-15 Brazil Korea DPR NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
2010-06-20 Brazil Ivory Coast NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
2010-06-28 Brazil Chile NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
2010-10-11 Brazil Ukraine NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2011-03-27 Brazil Scotland NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2011-06-04 Brazil Netherlands NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
2011-06-07 Brazil Romania NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2011-07-03 Brazil Venezuela NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
2011-07-09 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
2011-07-13 Brazil Ecuador NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA
2011-07-17 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
2011-09-05 Brazil Ghana NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2011-09-28 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2011-11-14 Brazil Egypt NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2012-06-09 Brazil Argentina NA NA NA NA NA NA NA NA NA NA -1 NA NA NA NA
2012-09-07 Brazil South Africa NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2012-09-10 Brazil China NA NA NA NA NA NA NA NA NA NA 8 NA NA NA NA
2012-09-19 Brazil Argentina NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2012-10-11 Brazil Iraq NA NA NA NA NA NA NA NA NA NA 6 NA NA NA NA
2012-11-14 Brazil Colombia NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
2013-04-24 Brazil Chile NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
2013-06-02 Brazil England NA NA NA NA NA NA NA NA NA NA 0 NA NA NA NA
2013-06-09 Brazil France NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA
2013-06-15 Brazil Japan NA NA 3 NA NA NA NA NA NA NA NA NA NA NA NA
2013-06-19 Brazil Mexico NA NA 2 NA NA NA NA NA NA NA NA NA NA NA NA
2013-06-22 Brazil Italy NA NA 2 NA NA NA NA NA NA NA NA NA NA NA NA
2013-06-26 Brazil Uruguay NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA
2013-06-30 Brazil Spain NA NA 3 NA NA NA NA NA NA NA NA NA NA NA NA
2013-09-07 Brazil Australia NA NA NA NA NA NA NA NA NA NA 6 NA NA NA NA
2013-09-10 Brazil Portugal NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2013-10-15 Brazil Zambia NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2013-11-19 Brazil Chile NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2014-06-03 Brazil Panama NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA
2014-06-06 Brazil Serbia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2014-06-12 Brazil Croatia NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
2014-06-17 Brazil Mexico NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
2014-06-23 Brazil Cameroon NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA
2014-06-28 Brazil Chile NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
2014-07-04 Brazil Colombia NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA
2014-07-08 Brazil Germany NA NA NA NA NA NA NA NA -6 NA NA NA NA NA NA
2014-07-12 Brazil Netherlands NA NA NA NA NA NA NA NA -3 NA NA NA NA NA NA
2015-03-29 Brazil Chile NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2015-06-07 Brazil Mexico NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA
2015-06-10 Brazil Honduras NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2015-06-14 Brazil Peru NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
2015-06-17 Brazil Colombia NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
2015-06-21 Brazil Venezuela NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
2015-06-27 Brazil Paraguay NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
2015-10-13 Brazil Venezuela NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
2015-11-17 Brazil Peru NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
2016-03-25 Brazil Uruguay NA NA NA NA NA NA NA NA NA 0 NA NA NA NA NA
2016-06-04 Brazil Ecuador NA NA NA 0 NA NA NA NA NA NA NA NA NA NA NA
2016-06-08 Brazil Haiti NA NA NA 6 NA NA NA NA NA NA NA NA NA NA NA
2016-06-12 Brazil Peru NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA
2016-09-06 Brazil Colombia NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
2016-10-06 Brazil Bolivia NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA
2016-11-10 Brazil Argentina NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
2017-01-26 Brazil Colombia NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA
2017-03-28 Brazil Paraguay NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
2017-08-31 Brazil Ecuador NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA
2017-10-10 Brazil Chile NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
2018-06-17 Brazil Switzerland NA NA NA NA NA NA NA NA 0 NA NA NA NA NA NA
2018-06-22 Brazil Costa Rica NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
2018-07-02 Brazil Mexico NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA
2018-07-06 Brazil Belgium NA NA NA NA NA NA NA NA -1 NA NA NA NA NA NA

Tidy Data

date home_team away_team home_score away_score tournament city country neutral
1872-11-30 Scotland England 0 0 Friendly Glasgow Scotland FALSE
1873-03-08 England Scotland 4 2 Friendly London England FALSE
1874-03-07 Scotland England 2 1 Friendly Glasgow Scotland FALSE
1875-03-06 England Scotland 2 2 Friendly London England FALSE
1876-03-04 Scotland England 3 0 Friendly Glasgow Scotland FALSE
1876-03-25 Scotland Wales 4 0 Friendly Glasgow Scotland FALSE
1877-03-03 England Scotland 1 3 Friendly London England FALSE
1877-03-05 Wales Scotland 0 2 Friendly Wrexham Wales FALSE
1878-03-02 Scotland England 7 2 Friendly Glasgow Scotland FALSE
1878-03-23 Scotland Wales 9 0 Friendly Glasgow Scotland FALSE

Gather (tidyR)

It collapses multiple columns into two columns. When people say reshaping your data, it is the same of tidying using gather.

gather(data, key="my_key", value="values_of_each_col", ...="col_you_have_want_to_distribute")

# Gathering our data together again.

d_untidy %>% gather(key = "key", value = "value", 4:18)
# A tibble: 8,280 x 5
   date       home_team away_team key          value
   <date>     <chr>     <chr>     <chr>        <int>
 1 1916-07-08 Brazil    Chile     Atlantic Cup    NA
 2 1916-07-12 Brazil    Uruguay   Atlantic Cup    NA
 3 1917-10-12 Brazil    Chile     Atlantic Cup    NA
 4 1919-05-11 Brazil    Chile     Atlantic Cup    NA
 5 1919-05-18 Brazil    Argentina Atlantic Cup    NA
 6 1919-05-26 Brazil    Uruguay   Atlantic Cup    NA
 7 1919-05-29 Brazil    Uruguay   Atlantic Cup    NA
 8 1919-06-01 Brazil    Argentina Atlantic Cup    NA
 9 1920-09-18 Brazil    Uruguay   Atlantic Cup    NA
10 1921-10-12 Brazil    Paraguay  Atlantic Cup    NA
# ... with 8,270 more rows
# Fixing the Na

d_untidy %>% gather(key = "key", value = "value", 4:18, na.rm = TRUE)
# A tibble: 552 x 5
   date       home_team away_team      key                     value
 * <date>     <chr>     <chr>          <chr>                   <int>
 1 1956-06-24 Brazil    Uruguay        Atlantic Cup                2
 2 1960-07-12 Brazil    Argentina      Atlantic Cup                4
 3 1972-06-28 Brazil    Czechoslovakia Brazil Independence Cup     0
 4 1972-07-02 Brazil    Yugoslavia     Brazil Independence Cup     3
 5 1972-07-05 Brazil    Scotland       Brazil Independence Cup     1
 6 1972-07-09 Brazil    Portugal       Brazil Independence Cup     1
 7 1997-12-16 Brazil    Mexico         Confederations Cup          1
 8 1997-12-19 Brazil    Czech Republic Confederations Cup          2
 9 1997-12-21 Brazil    Australia      Confederations Cup          6
10 1999-07-24 Brazil    Germany        Confederations Cup          4
# ... with 542 more rows
# Graphing

d_untidy %>% 
select(1:3, contains("FIFA")) %>% gather(key = "key", value = "value", 4:5, 
    factor_key = TRUE, na.rm = TRUE) %>% 
group_by(key, away_team) %>% 
summarise(mean_brazil = mean(value)) %>% 
ggplot(., aes(y = mean_brazil, x = away_team, group = away_team, fill = key)) + 
    
geom_col(position = "dodge") + 
coord_flip() + 
geom_hline(yintercept = 0, alpha = 0.3, color = "blue") + 
facet_wrap(~key) + 
theme_minimal()

Separate

separate(data, col="one_you_want_to_separate", into="division", sep="regular_expression")

d_untidy %>% 
separate(col = date, into = c("year", "month", "day"))
# A tibble: 552 x 20
   year  month day   home_team away_team `Atlantic Cup` `Brazil Indepen~
   <chr> <chr> <chr> <chr>     <chr>              <int>            <int>
 1 1916  07    08    Brazil    Chile                 NA               NA
 2 1916  07    12    Brazil    Uruguay               NA               NA
 3 1917  10    12    Brazil    Chile                 NA               NA
 4 1919  05    11    Brazil    Chile                 NA               NA
 5 1919  05    18    Brazil    Argentina             NA               NA
 6 1919  05    26    Brazil    Uruguay               NA               NA
 7 1919  05    29    Brazil    Uruguay               NA               NA
 8 1919  06    01    Brazil    Argentina             NA               NA
 9 1920  09    18    Brazil    Uruguay               NA               NA
10 1921  10    12    Brazil    Paraguay              NA               NA
# ... with 542 more rows, and 13 more variables: `Confederations
#   Cup` <int>, `Copa América` <int>, `Copa Bernardo O'Higgins` <int>,
#   `Copa Oswaldo Cruz` <int>, `Copa Rio Branco` <int>, `Copa Roca` <int>,
#   `FIFA World Cup` <int>, `FIFA World Cup qualification` <int>,
#   Friendly <int>, `Gold Cup` <int>, Mundialito <int>, `Pan American
#   Championship` <int>, `USA Cup` <int>
# Here, the default is to separate any sequence of non-alphanumeric values.

# Unite() does the opposite

Spread

The opposite of gather. It transforms your data from wide to long

# Tournaments Oppenents on the column

d %>% select(1:5, tournament) %>% 
filter(home_team == "Brazil") %>% 
mutate(diff = home_score - away_score) %>% 
spread(key = tournament, value = diff) %>% 
dplyr::select(-contains("score"))
# A tibble: 552 x 18
   date       home_team away_team `Atlantic Cup` `Brazil Indepen~
   <date>     <chr>     <chr>              <int>            <int>
 1 1916-07-08 Brazil    Chile                 NA               NA
 2 1916-07-12 Brazil    Uruguay               NA               NA
 3 1917-10-12 Brazil    Chile                 NA               NA
 4 1919-05-11 Brazil    Chile                 NA               NA
 5 1919-05-18 Brazil    Argentina             NA               NA
 6 1919-05-26 Brazil    Uruguay               NA               NA
 7 1919-05-29 Brazil    Uruguay               NA               NA
 8 1919-06-01 Brazil    Argentina             NA               NA
 9 1920-09-18 Brazil    Uruguay               NA               NA
10 1921-10-12 Brazil    Paraguay              NA               NA
# ... with 542 more rows, and 13 more variables: `Confederations
#   Cup` <int>, `Copa América` <int>, `Copa Bernardo O'Higgins` <int>,
#   `Copa Oswaldo Cruz` <int>, `Copa Rio Branco` <int>, `Copa Roca` <int>,
#   `FIFA World Cup` <int>, `FIFA World Cup qualification` <int>,
#   Friendly <int>, `Gold Cup` <int>, Mundialito <int>, `Pan American
#   Championship` <int>, `USA Cup` <int>

Extra functions and packages on data manipulation

  • case_when(): replacement for if else.
  • fct_relevel() : to work with factors.
  • ludibrate package for working with dates.
  • stringr package to work with strings.

Quick example of lubridate

Cheat sheet here

library(lubridate)

ymd("2013-september, 20")
[1] "2013-09-20"
mdy("dec 30 1988")
[1] "1988-12-30"
# With mutate: Number of goals per year


d_time <- d %>% 
  
  mutate(year= year(date), 
         month= month(date)) %>%
  
  mutate(interval = interval(date,today()),
         time_span= as.period(interval), 
         in_months = interval / months(6)) %>% # per semester %>%
  
  group_by(year) %>% 
  
  summarize(total_gols= sum(home_score + away_score)) %>% 
  
  
  ggplot(., aes(y=total_gols, x=year)) + 
  
  geom_point( color="pink") + 
  
  geom_smooth(method="loess",span=.1,colour="blue") +
  
  labs(title="",
          x="Years", y="Number of gols") +
  
  theme_minimal()

Quick example stringR

Cheat sheet here

library(conflicted)
conflict_prefer("filter", "dplyr")


# everything starts with str
got <- read_csv("battles.csv")

got_red <- got %>% 
mutate(attacker_king = str_to_lower(attacker_king), stark = str_detect(attacker_king, 
    "stark"), attacker_king = str_replace_all(attacker_king, "joffrey/tommen baratheon", 
    "cersey lannister"), attacker_no_endspace = str_trim(attacker_king)) %>% 
    
select(attacker_king, stark, major_death) %>% 
bind_cols(., as_data_frame(str_split(.$attacker_king, pattern = fixed(" "), 
    simplify = TRUE, n = 2)))

print(got_red)
# A tibble: 38 x 5
   attacker_king       stark major_death V1          V2       
   <chr>               <lgl>       <int> <chr>       <chr>    
 1 cersey lannister    FALSE           1 cersey      lannister
 2 cersey lannister    FALSE           1 cersey      lannister
 3 cersey lannister    FALSE           0 cersey      lannister
 4 robb stark          TRUE            1 robb        stark    
 5 robb stark          TRUE            1 robb        stark    
 6 robb stark          TRUE            0 robb        stark    
 7 cersey lannister    FALSE           0 cersey      lannister
 8 balon/euron greyjoy FALSE           0 balon/euron greyjoy  
 9 balon/euron greyjoy FALSE           0 balon/euron greyjoy  
10 balon/euron greyjoy FALSE           0 balon/euron greyjoy  
# ... with 28 more rows
got_red %>% 
na.omit() %>% 
count(V2) %>% 
ggplot(., aes(y = n, x = V2)) + 
geom_col(fill = "tomato2", alpha = 0.8, color = "black") + theme_minimal() + 
    
labs(title = "Major Deaths in the battle", y = "Total Number", x = "King Attacking")

Extra Material

Data Visualization on ggplot2

ggplot2 is a package from tidyverse. It shares the logic of the tidyverse using simple, intuitive functions and working well with pipes. It produces amazing graphs, and allows one to easily combine different features, layers, and information on the same graph.

See this link to get some examples of ggplot graphs

Two importants principles

      - Graphics are distinct layers of elements

      - Meaninful plots work mapping the aesthetics. 

Elements

      - Data
      
      - Aesthetics : scales

      - Geometries : visual elements

Basic workflow

GGplot work on layers. The grammar works pilling up different layers.

First layer: data

Second layer: Aesthetics.

  • What is your x?

  • what is your y?

  • Are you groupping on something

  • Here you add variations on the plot (color, fill, transparency, shape)

Third Layer: Geometries

  • geom_histogram() : histogram
  • geom_bar() : bar plot
  • geom_line() : line plot
  • geom_point() : scatter plot
  • geom_boxplot() : box plot
  • geom_density() : density plot
  • geom_dotplot() : dot plot
  • geom_violin() : violin plot

Other Layers: Customization

  • theme_bw() : black and white
  • theme_classic() : old school no grids
  • theme_dark() : dark theme
  • theme_minimal() : minimal theme
  • theme_void() : no theme
  • scale_*aes*_() : To change the aesthetichs
  • labs (): for labels
  • xlim() or ylim(): for limits

Example: Electoral data in Brazil

geom_point

load("data-venturareplication.rda")

df <- df %>% mutate(treat = ifelse(rankvote == 1, 1, 0)) %>% dplyr::filter(vote_margin_share != 
    1, vote_margin_share != -1)


ggplot(df, aes(x = vote_margin_share, y = vs_party, color = factor(treat, labels = c("Control", 
    "Treatment")))) + geom_point(shape = 21, alpha = 0.2) + 
scale_color_brewer(NULL, type = "qual", palette = 6) + 
guides(colour = guide_legend("Region", override.aes = list(alpha = 1))) + 
geom_vline(aes(xintercept = 0), color = "grey", size = 1, linetype = "dashed") + 
    

labs(x = "Margin of victory on local executive election", y = "Vote of the party on the next legislative election", 
    title = "RD effect for reverse cottail in Brazil")

Geom_smooth

ggplot(df, aes(x = vote_margin_share, y = vs_party, group = as.factor(treat), 
    fill = as.factor(treat))) + geom_smooth() + geom_vline(aes(xintercept = 0), 
    color = "grey", size = 1, linetype = "dashed") + labs(x = "Margin of victory on local executive election", 
    y = "Vote of the party on the next legislative election", title = "RD effect for reverse cottail in Brazil") + 
    theme_minimal()

Using facet_wrap

ggplot(df, aes(x = vote_margin_share, y = vs_party, group = as.factor(treat), 
    fill = as.factor(treat))) + 
geom_smooth() + 
geom_vline(aes(xintercept = 0), color = "grey", size = 1, linetype = "dashed") + 
    
labs(x = "Margin of victory on local executive election", y = "Vote of the party on the next legislative election", 
    title = "RD effect for reverse cottail in Brazil") + 
theme_bw() + 
facet_wrap(~ANO_ELEICAO) + 
theme(legend.position = "None")

Geom_errorbar

library(broom)

# Model
mod.1 <- lm(vs_party ~ treat + vote_margin_share + I(vote_margin_share^2) + 
    I(vote_margin_share^3) + I(treat * vote_margin_share) + I(treat * vote_margin_share^2) + 
    I(treat * vote_margin_share^3), data = df)

# summary(mod.1)
result <- tidy(mod.1) %>% mutate(upper = estimate + std.error * 1.96, lower = estimate - 
    std.error * 1.96, col = ifelse(estimate > 0, "Positive", "Negative"))



## Graph

ggplot(result, aes(y = estimate, x = term, fill = col)) + 
geom_point(alpha = 1, shape = 21, size = 2, colour = "black") + 
geom_errorbar(aes(ymax = upper, ymin = lower), colour = "black", fill = "black", 
    alpha = 0.5) + 
ylab("Estimates") + 
geom_hline(aes(yintercept = 0), color = "lightcoral") + 
coord_flip() + 
xlab("") + 
ggthemes::theme_fivethirtyeight() + 
theme(legend.position = "None")

geom_col

conflict_prefer("filter", "dplyr")

d_top10 <- df %>% 
filter(treat == 1) %>% 
group_by(ANO_ELEICAO, SIGLA_PARTIDO.x) %>% 
summarise(mayor = n()) %>% 
top_n(10)


ggplot(d_top10, aes(x = as.factor(ANO_ELEICAO), y = mayor)) + 
geom_col(fill = "tomato2", alpha = 0.8, color = "black", width = 0.5) + 
labs(title = "Number of Mayors elected by party and year", y = "", x = "") + 
    
facet_wrap(~SIGLA_PARTIDO.x)

Multiple Layers

Take as granted the data I am showing below. It is a seats and votes model I run for the multilevel seminar using roll-call votes data in the United States House.

load("seats_votes.Rdata")

ggplot(us_data, aes(y = seatshare, x = v)) + 
geom_point(aes(color = party), alpha = 0.5) + 

geom_abline(color = "gray") + 
ylab("Seat Share") + xlab("Vote Share") + 
geom_line(data = cen, aes(y = cen$p, x = v), color = "black") + 
scale_color_manual(values = c("red", "blue", "purple"), labels = c("Democrats", 
    "Republican", "Other"), name = "Party") + theme_minimal() + 
annotate("label", label = paste("Majoritarian Bias equal to ", round(my.coef[1], 
    digits = 3)), y = 0.8, x = 0.2)

Tiago Ventura

2018-10-14