100  Question

Schlüsselwörter

Aufgaben, Statistik, Prognose, Modellierung, R, Datenanalyse, Regression

Schreiben Sie eine Funktion, mit folgendem Algorithmus, wobei ein beliebiger Vektor als Eingabe verlangt wird.

  1. Zähle die Anzahl verschiedener Werte.
  2. Wenn es nur zwei verschiedene Werte gibt, gebe TRUE zurück, ansonsten FALSE.

Hinweise:

101 Solution

has_two_levels <- function(vec){
  
  # input: vector of any type
  # value: number of unique values (double)
  
  tmp <- length(unique(vec))
  tmp == 2
}

levels ist ein Ausdruck, der nahelegt, dass es sich um verschiedene Werte (“Ausprägungen” oder “Stufen”) handelt.

Alternativ könnte man die Funktion auch so schreiben:

has_two_values <- function(vec){
  
  # input: vector of any type
  # value: number of unique values (double)
  
  step1 <- unique(vec)
  step2 <- length(step1)
  step3 <- if(step2 == 2) {
    out <- TRUE
  } else {
    out <- FALSE
  }
  
  out <- step2
  return(out)
  
}

Das ist expliziter, aber länger.

Wenn man es genau nimmt, heißt binär, dass es nur die Werte 0 und 1 gibt. Das ist ein strengeres Kriterium, wie dass es zwei beliebigen verschiedene Werte gibt (s. unten dazu ein Vorschlag).

Testen wir unsere Funktion, Test 1:

x <- c(1,2, 3, 3, 3, 1)
x2 <- c("A", "B")


has_two_levels(x2)
has_two_levels(x)
## [1] TRUE
## [1] FALSE

Test 2:

data(mtcars)

Wir wenden unsere neue Funktion mit Tidyverse-Methoden an:

mtcars %>% 
  summarise(am_has_two_values = has_two_levels(am),
            mpg_has_two_values = has_two_levels(mpg))

Bonus!

Verwenden Sie across() (dplyr), um alle Spalten von mtcars mit has_two_levels() zu überprüfen.

mtcars %>% 
  summarise(across(everything(),
                   has_two_levels))

Kann man auch so schreiben:

mtcars %>% 
  summarise(across(everything(),
                   ~ has_two_levels(.)))

Bonus-Bonus:

So könnte man eine Funktion schreiben, die prüft, ob die Ausprägungen eines Vektors binär sind, d.h. nur 0 oder 1:

is_binary <- function(var){
  return(all(var %in% c(0,1)))
}

102 Meta-information

extype: string exsolution: NA exname: funs-is-binary expoints: 1