Tidy Data

Pivoting

Long to Wide Form

table4a_long <- table4a %>%
    
    pivot_longer(cols = c('1999', '2000'), 
                 names_to = "year", 
                 values_to = "cases")

Wide to long form

table4a_long %>%
    
    pivot_wider(names_from = year, 
                values_from = cases)
## # A tibble: 3 × 3
##   country     `1999` `2000`
##   <chr>        <dbl>  <dbl>
## 1 Afghanistan    745   2666
## 2 Brazil       37737  80488
## 3 China       212258 213766

Separting and Uniting

Separate a column

table3_sep <- table3 %>%
    
    separate(col = rate, into = c("cases", "population"))

Unite two columns

table3_sep %>%
    
    unite(col = "rate", c(cases,population), sep = "/", )
## # A tibble: 6 × 3
##   country      year rate             
##   <chr>       <dbl> <chr>            
## 1 Afghanistan  1999 745/19987071     
## 2 Afghanistan  2000 2666/20595360    
## 3 Brazil       1999 37737/172006362  
## 4 Brazil       2000 80488/174504898  
## 5 China        1999 212258/1272915272
## 6 China        2000 213766/1280428583

Missing Values

stocks <- tibble(
    year = c(2015, 2015, 2015, 2015, 2016, 2016, 2016),
    qtr = c(1, 2, 3, 4, 2, 3, 4),
    return = c(1.88, 0.59, 0.35 , NA, 0.92, 0.17, 2.66)
)
stocks %>%
    
    pivot_wider(names_from = year, values_from = return)
## # A tibble: 4 × 3
##     qtr `2015` `2016`
##   <dbl>  <dbl>  <dbl>
## 1     1   1.88  NA   
## 2     2   0.59   0.92
## 3     3   0.35   0.17
## 4     4  NA      2.66
bikes <- tibble(
    bike_model = c("A", "A", "B", "B", "C"),
    material = c("steel","Steel", "aluminium", "aluminium", "steel"),
    price = c(100, 200, 300, 400, 500),
)
bikes %>%
    
    pivot_wider(names_from = bike_model, values_from = price)
## Warning: Values from `price` are not uniquely identified; output will contain list-cols.
## • Use `values_fn = list` to suppress this warning.
## • Use `values_fn = {summary_fun}` to summarise duplicates.
## • Use the following dplyr code to identify duplicates.
##   {data} |>
##   dplyr::summarise(n = dplyr::n(), .by = c(material, bike_model)) |>
##   dplyr::filter(n > 1L)
## # A tibble: 3 × 4
##   material  A         B         C        
##   <chr>     <list>    <list>    <list>   
## 1 steel     <dbl [1]> <NULL>    <dbl [1]>
## 2 Steel     <dbl [1]> <NULL>    <NULL>   
## 3 aluminium <NULL>    <dbl [2]> <NULL>
bikes %>%
    
    complete(bike_model, material)
## # A tibble: 10 × 3
##    bike_model material  price
##    <chr>      <chr>     <dbl>
##  1 A          aluminium    NA
##  2 A          steel       100
##  3 A          Steel       200
##  4 B          aluminium   300
##  5 B          aluminium   400
##  6 B          steel        NA
##  7 B          Steel        NA
##  8 C          aluminium    NA
##  9 C          steel       500
## 10 C          Steel        NA
treatment <- tribble(
    ~ person,         ~ treatment,  ~response, 
    "Derrick Whitmore", 1,   7,
    NA,  2, 10,
    NA, 3, 9,
    "Katherine Burke", 1, 4, 
)

treatment %>%
    
    fill(person, .direction = "up")
## # A tibble: 4 × 3
##   person           treatment response
##   <chr>                <dbl>    <dbl>
## 1 Derrick Whitmore         1        7
## 2 Katherine Burke          2       10
## 3 Katherine Burke          3        9
## 4 Katherine Burke          1        4

Non-Tidy Data