purrr-map01

R
map
tidyverse
Published

October 24, 2022

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.3     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.4     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.0
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Exercise

Erstellen Sie einen Tibble mit folgenden Spalten:

  1. Buchstaben A-Z, so dass in der 1. Zeile “A” steht, in der 2. Zeile “B” etc.
  2. Buchstaben a-z, so dass in der 1. Zeile “a” steht, in der 2. Zeile “b” etc.
  3. Buchstabenkombination der ersten beiden Spalten, so dass in der 1. Zeile “A-a” steht, in der 2. Zeile “B-b” etc.











Solution

Geht es vielleicht so?

d <-
  tibble(
    letter1 = LETTERS,
    letter2 = letters,
    letters = paste(letter1, letter2, collapse = "-")
  )

head(d)
# A tibble: 6 × 3
  letter1 letter2 letters                                                       
  <chr>   <chr>   <chr>                                                         
1 A       a       A a-B b-C c-D d-E e-F f-G g-H h-I i-J j-K k-L l-M m-N n-O o-P…
2 B       b       A a-B b-C c-D d-E e-F f-G g-H h-I i-J j-K k-L l-M m-N n-O o-P…
3 C       c       A a-B b-C c-D d-E e-F f-G g-H h-I i-J j-K k-L l-M m-N n-O o-P…
4 D       d       A a-B b-C c-D d-E e-F f-G g-H h-I i-J j-K k-L l-M m-N n-O o-P…
5 E       e       A a-B b-C c-D d-E e-F f-G g-H h-I i-J j-K k-L l-M m-N n-O o-P…
6 F       f       A a-B b-C c-D d-E e-F f-G g-H h-I i-J j-K k-L l-M m-N n-O o-P…

Nein, leider nicht.

OK, neuer Versuch:

d <-
  tibble(
    letter1 = LETTERS,
    letter2 = letters) %>% 
  unite("letters", c(letter1, letter2), remove = FALSE)


head(d)
# A tibble: 6 × 3
  letters letter1 letter2
  <chr>   <chr>   <chr>  
1 A_a     A       a      
2 B_b     B       b      
3 C_c     C       c      
4 D_d     D       d      
5 E_e     E       e      
6 F_f     F       f      

Probieren wir es mit purrr::map():

d <-
  tibble(
    letter1 = LETTERS,
    letter2 = letters,
    letters = map2_chr(letter1, letter2, ~ paste(c(.x, .y), collapse ="-"))
  )

head(d)
# A tibble: 6 × 3
  letter1 letter2 letters
  <chr>   <chr>   <chr>  
1 A       a       A-a    
2 B       b       B-b    
3 C       c       C-c    
4 D       d       D-d    
5 E       e       E-e    
6 F       f       F-f    

Infos zur Funktion paste() findet sich z.B. hier.


Categories:

  • R
  • map
  • tidyverse