### Schritt 1: Gruppieren nach `ID` - **`besserlesen |> group_by(ID)`**: Der Befehl startet mit dem Datenframe `besserlesen`. Mit dem Pipe-Operator (`|>`) wird dieser an die Funktion **`group_by()`** übergeben. Die Daten werden nach der Variable **`ID`** gruppiert. Das bedeutet, dass alle nachfolgenden Operationen separat für jede einzelne ID durchgeführt werden. ### Schritt 2: Zusammenfassen der Daten - **`summarise(across(everything(), ~ n_distinct(.) == 1))`**: Im nächsten Schritt werden die gruppierten Daten zusammengefasst. - **`summarise()`**: Diese Funktion erstellt eine neue, zusammenfassende Tabelle. - **`across(everything(), ...)`**: Dies wendet die nachfolgende Funktion auf alle Spalten (`everything()`) des Datenframes an, mit Ausnahme der Gruppierungsvariablen (`ID`). - **`~ n_distinct(.) == 1`**: Dies ist die eigentliche Logik. Für jede Spalte (dargestellt durch `.`) zählt die Funktion **`n_distinct()`** die Anzahl der einzigartigen Werte. Der Vergleich **`== 1`** prüft dann, ob nur ein einziger, also ein konstanter Wert existiert. Das Ergebnis ist `TRUE` (wahr) oder `FALSE` (falsch). ### Schritt 3: Auswählen der Spalten mit konstanten Werten - **`select_if(all)`**: Die Tabelle aus dem vorherigen Schritt, die für jede Spalte einen `TRUE`- oder `FALSE`-Wert enthält, wird an **`select_if()`** weitergeleitet. Die Funktion **`all()`** prüft, ob alle Werte in einer Spalte `TRUE` sind. Das bedeutet, dass sie die Spalten auswählt, in denen die Bedingung (`n_distinct(.) == 1`) für alle IDs wahr ist. Mit anderen Worten: Sie wählt nur die Spalten aus, die über alle IDs hinweg konstant sind. ### Schritt 4: Extrahieren der Variablennamen - **`names()`**: Dieser letzte Schritt wendet die Funktion **`names()`** auf die ausgewählten Spalten an. Diese Funktion gibt einen Vektor mit den Namen der Spalten zurück, die als konstant identifiziert wurden. Dieses Ergebnis wird dann der Variable **`constant_variables`** zugewiesen.