Anzahl einzelner Ausprägungen abfragen

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Anzahl einzelner Ausprägungen abfragen

Beitrag von bigben »

Nee, ist doch super, wenn das tidyverse auch vorkommt. Man muss halt dazuschreiben, dass im einen Fall data.table und im anderen Fall dplyr und magrittr (oder das ganze tidyverse) geladen werden muss, weil das halt nicht selbstverständlich bei jedem sowieso geladen ist und nicht selbstverständlich bei jeder Dozentin und jedem Kommilitonen sowieso auf dem Rechner installiert ist.

Unsicher bin ich mir, ob wir jetzt, da eine data.table und eine tidyverse-Version auf dem Tisch liegen doch juristisch gezwungen sind, einen Geschwindigkeitsvergleich zu machen?

Code: Alles auswählen

library(microbenchmark)
library(data.table)
library(dplyr)
library(magrittr)


N           <- 1000000
PLZ.str     <- sprintf("%05d", 1010:9999)
Verzeichnis.df <- data.frame(Adressnummer=paste0("A", sprintf("%08d", 1:N)), PLZ=sample(PLZ.str, N, replace=TRUE))
Verzeichnis.dt <- as.data.table(Verzeichnis.df)
Verzeichnis.ti <- as_tibble(Verzeichnis.df)


mb <- microbenchmark(Anzahl <- table(Verzeichnis.df$PLZ),
               Anzahl <- Verzeichnis.dt[  , .N, by = PLZ],
               Anzahl <- Verzeichnis.ti%>% count(PLZ), 
               times = 1000L, unit="ms")
Das ist jetzt ein bisschen unfair gegenüber base, weil table als Einziges die Antworten sortiert, aber die haben ja auch keine andere Option programmiert. Ergebnis:

Code: Alles auswählen

> mb
Unit: milliseconds
                                     expr     min       lq     mean   median       uq      max neval cld
      Anzahl <- table(Verzeichnis.df$PLZ) 15.8329 20.22430 32.54471 22.14340 44.63535 303.4359  1000 a  
 Anzahl <- Verzeichnis.dt[, .N, by = PLZ] 23.0289 27.22180 35.02325 28.58875 30.81735 344.5909  1000  b 
  Anzahl <- Verzeichnis.ti %>% count(PLZ) 44.0943 49.46985 53.72740 51.74315 54.60770 324.2127  1000   c
Rplot.png
Rplot.png (8.96 KiB) 704 mal betrachtet
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
ruppy
Beiträge: 41
Registriert: Mo Nov 04, 2019 10:05 pm

Re: Anzahl einzelner Ausprägungen abfragen

Beitrag von ruppy »

Mehrere Lösungsansätze und dann noch ein Performance-Vergleich.
Ist ja wie bei SO hier :D

Bzgl. des Benchmarks: interessante Ergebnisse.
Hätte ich raten müssen, hätte ich gesagt: data.table > base > tidyverse

BG ruppy
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Anzahl einzelner Ausprägungen abfragen

Beitrag von Athomas »

Hätte ich raten müssen, hätte ich gesagt: data.table > base > tidyverse
Oh, behave! :lol:

Ich nehme an, ">" bedeutet für Dich "schneller" - auf meinem Rechner ist das (natürlich!) auch so:

Code: Alles auswählen

Unit: milliseconds
                                     expr     min       lq     mean   median       uq      max neval cld
      Anzahl <- table(Verzeichnis.df$PLZ) 10.5680 12.95745 18.66802 13.70160 28.51445 174.9793  1000  b 
 Anzahl <- Verzeichnis.dt[, .N, by = PLZ] 10.6370 11.59980 16.67246 11.98025 13.12635 175.7684  1000 a  
  Anzahl <- Verzeichnis.ti %>% count(PLZ) 35.2527 37.06525 38.68844 37.72530 38.65120 200.3251  1000   c
Antworten