Import your data

penguins <- readr::read_csv("penguins.csv")
## Rows: 344 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): species, island, sex
## dbl (5): bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g, year
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
data_small <- penguins %>%
    
    select(species,bill_length_mm, body_mass_g) %>%
    filter(species %in% c("Adelie", "Gentoo"))

Pivoting

long to wide form

penguins_long2 <- penguins %>%
    
    pivot_longer(cols = c(bill_length_mm, bill_depth_mm,
                          flipper_length_mm, body_mass_g),
                 names_to = "measurement",
                 values_to = "value")

penguins_long2 %>%
    pivot_wider(names_from = measurement,
                values_from = value)
## Warning: Values from `value` 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(species, island, sex, year,
##   measurement)) |>
##   dplyr::filter(n > 1L)
## # A tibble: 35 × 8
##    species island    sex     year bill_length_mm bill_depth_mm flipper_length_mm
##    <chr>   <chr>     <chr>  <dbl> <list>         <list>        <list>           
##  1 Adelie  Torgersen male    2007 <dbl [7]>      <dbl [7]>     <dbl [7]>        
##  2 Adelie  Torgersen female  2007 <dbl [8]>      <dbl [8]>     <dbl [8]>        
##  3 Adelie  Torgersen <NA>    2007 <dbl [5]>      <dbl [5]>     <dbl [5]>        
##  4 Adelie  Biscoe    female  2007 <dbl [5]>      <dbl [5]>     <dbl [5]>        
##  5 Adelie  Biscoe    male    2007 <dbl [5]>      <dbl [5]>     <dbl [5]>        
##  6 Adelie  Dream     female  2007 <dbl [9]>      <dbl [9]>     <dbl [9]>        
##  7 Adelie  Dream     male    2007 <dbl [10]>     <dbl [10]>    <dbl [10]>       
##  8 Adelie  Dream     <NA>    2007 <dbl [1]>      <dbl [1]>     <dbl [1]>        
##  9 Adelie  Biscoe    female  2008 <dbl [9]>      <dbl [9]>     <dbl [9]>        
## 10 Adelie  Biscoe    male    2008 <dbl [9]>      <dbl [9]>     <dbl [9]>        
## # ℹ 25 more rows
## # ℹ 1 more variable: body_mass_g <list>

wide to long form

penguins_long <- penguins %>%
    
    pivot_longer(cols = c(bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g),
                 names_to = "measurement",
                 values_to = "value"
    )

Separating and Uniting

penguins_united <- penguins %>%
    unite(col = "species_island", species, island, sep = "/", remove = FALSE)

penguins_united %>% select(species, island, species_island)
## # A tibble: 344 × 3
##    species island    species_island  
##    <chr>   <chr>     <chr>           
##  1 Adelie  Torgersen Adelie/Torgersen
##  2 Adelie  Torgersen Adelie/Torgersen
##  3 Adelie  Torgersen Adelie/Torgersen
##  4 Adelie  Torgersen Adelie/Torgersen
##  5 Adelie  Torgersen Adelie/Torgersen
##  6 Adelie  Torgersen Adelie/Torgersen
##  7 Adelie  Torgersen Adelie/Torgersen
##  8 Adelie  Torgersen Adelie/Torgersen
##  9 Adelie  Torgersen Adelie/Torgersen
## 10 Adelie  Torgersen Adelie/Torgersen
## # ℹ 334 more rows

Separate a column

penguins_sep <- penguins_united %>%
    
    select(-species, -island) %>%
    separate(col = species_island, into = c("species", "island"), sep = "/")

penguins_sep %>% select(species, island)
## # A tibble: 344 × 2
##    species island   
##    <chr>   <chr>    
##  1 Adelie  Torgersen
##  2 Adelie  Torgersen
##  3 Adelie  Torgersen
##  4 Adelie  Torgersen
##  5 Adelie  Torgersen
##  6 Adelie  Torgersen
##  7 Adelie  Torgersen
##  8 Adelie  Torgersen
##  9 Adelie  Torgersen
## 10 Adelie  Torgersen
## # ℹ 334 more rows

Unite two columns

Missing Values