Die Funktion distinct() dient dazu, eindeutige Zeilen (Beobachtungen) in einem Data Frame zu identifizieren. Dieser Bedarf tritt häufig auf, und die Funktion distinct() bewältigt in Kombination mit anderen dplyr-Funktionen, insbesondere group_by(), im Prinzip alle Aufgaben dieser Art.
In diesem Kapitel verwenden wir den Datensatz mpg aus dem Package tidyverse. Um auf die Daten zugreifen zu können, müssen sowohl tidyverse als auch der Datensatz mpg mit den folgenden Befehlen aktiviert werden:
library(tidyverse)
data(mpg)
## Die ersten 10 Zeilen inspizieren
head(mpg, 10)## A tibble: 10 × 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
3 audi a4 2 2008 4 manual(m6) f 20 31 p compact
4 audi a4 2 2008 4 auto(av) f 21 30 p compact
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact
7 audi a4 3.1 2008 6 auto(av) f 18 27 p compact
8 audi a4 quattro 1.8 1999 4 manual(m5) 4 18 26 p compact
9 audi a4 quattro 1.8 1999 4 auto(l5) 4 16 25 p compact
10 audi a4 quattro 2 2008 4 manual(m6) 4 20 28 p compactWir beginnen damit, alle Zeilen mit eindeutigen Werten der Variablen manufacturer auszuwählen.
mpg |>
distinct(manufacturer, .keep_all = TRUE)## A tibble: 15 × 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 chevrolet c1500 suburban 2wd 5.3 2008 8 auto(l4) r 14 20 r suv
3 dodge caravan 2wd 2.4 1999 4 auto(l3) f 18 24 r minivan
4 ford expedition 2wd 4.6 1999 8 auto(l4) r 11 17 r suv
5 honda civic 1.6 1999 4 manual(m5) f 28 33 r subcompact
6 hyundai sonata 2.4 1999 4 auto(l4) f 18 26 r midsize
7 jeep grand cherokee 4wd 3 2008 6 auto(l5) 4 17 22 d suv
8 land rover range rover 4 1999 8 auto(l4) 4 11 15 p suv
9 lincoln navigator 2wd 5.4 1999 8 auto(l4) r 11 17 r suv
10 mercury mountaineer 4wd 4 1999 6 auto(l5) 4 14 17 r suv
11 nissan altima 2.4 1999 4 manual(m5) f 21 29 r compact
12 pontiac grand prix 3.1 1999 6 auto(l4) f 18 26 r midsize
13 subaru forester awd 2.5 1999 4 manual(m5) 4 18 25 r suv
14 toyota 4runner 4wd 2.7 1999 4 manual(m5) 4 15 20 r suv
15 volkswagen gti 2 1999 4 manual(m5) f 21 29 r compactBeachten Sie das Argument .keep_all = TRUE. Dieses Argument teilt der Funktion mit, dass alle Spalten des Datensatzes mpg erhalten bleiben sollen, nachdem die Funktion distinct() angewendet wurde. Wird dieses Argument nicht angegeben, bleiben alle eindeutigen Beobachtungen erhalten, die übrigen Variablen werden jedoch entfernt (mit Ausnahme der Variablen, die zur Identifizierung der eindeutigen Zeilen verwendet wurde).
Wir identifizieren nun alle eindeutigen Zeilen (Beobachtungen) in jeder Fahrzeugklasse (class) innerhalb jedes Herstellers (manufacturer):
mpg |>
distinct(manufacturer, class, .keep_all = TRUE)## A tibble: 32 × 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 audi a6 quattro 2.8 1999 6 auto(l5) 4 15 24 p midsize
3 chevrolet c1500 suburban 2wd 5.3 2008 8 auto(l4) r 14 20 r suv
4 chevrolet corvette 5.7 1999 8 manual(m6) r 16 26 p 2seater
5 chevrolet malibu 2.4 1999 4 auto(l4) f 19 27 r midsize
6 dodge caravan 2wd 2.4 1999 4 auto(l3) f 18 24 r minivan
7 dodge dakota pickup 4wd 3.7 2008 6 manual(m6) 4 15 19 r pickup
8 dodge durango 4wd 3.9 1999 6 auto(l4) 4 13 17 r suv
9 ford expedition 2wd 4.6 1999 8 auto(l4) r 11 17 r suv
10 ford f150 pickup 4wd 4.2 1999 6 auto(l4) 4 14 17 r pickup
11 ford mustang 3.8 1999 6 manual(m5) r 18 26 r subcompact
12 honda civic 1.6 1999 4 manual(m5) f 28 33 r subcompact
13 hyundai sonata 2.4 1999 4 auto(l4) f 18 26 r midsize
14 hyundai tiburon 2 1999 4 auto(l4) f 19 26 r subcompact
15 jeep grand cherokee 4wd 3 2008 6 auto(l5) 4 17 22 d suv
16 land rover range rover 4 1999 8 auto(l4) 4 11 15 p suv
17 lincoln navigator 2wd 5.4 1999 8 auto(l4) r 11 17 r suv
18 mercury mountaineer 4wd 4 1999 6 auto(l5) 4 14 17 r suv
19 nissan altima 2.4 1999 4 manual(m5) f 21 29 r compact
20 nissan altima 2.5 2008 4 auto(av) f 23 31 r midsize
21 nissan pathfinder 4wd 3.3 1999 6 auto(l4) 4 14 17 r suv
22 pontiac grand prix 3.1 1999 6 auto(l4) f 18 26 r midsize
23 subaru forester awd 2.5 1999 4 manual(m5) 4 18 25 r suv
24 subaru impreza awd 2.2 1999 4 auto(l4) 4 21 26 r subcompact
25 subaru impreza awd 2.5 2008 4 auto(s4) 4 20 25 p compact
26 toyota 4runner 4wd 2.7 1999 4 manual(m5) 4 15 20 r suv
27 toyota camry 2.2 1999 4 manual(m5) f 21 29 r midsize
28 toyota camry solara 2.2 1999 4 auto(l4) f 21 27 r compact
29 toyota toyota tacoma 4wd 2.7 1999 4 manual(m5) 4 15 20 r pickup
30 volkswagen gti 2 1999 4 manual(m5) f 21 29 r compact
31 volkswagen new beetle 1.9 1999 4 manual(m5) f 35 44 d subcompact
32 volkswagen passat 1.8 1999 4 manual(m5) f 21 29 p midsizeSie können distinct() mit group_by() kombinieren.