Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Antworten
Thy
Beiträge: 7
Registriert: So Apr 11, 2021 5:35 pm

Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von Thy »

Hallo,

ich habe einen Datensatz, der u. a. 40 Variablen enthält, die ich auszählen möchte.
Der um es einfach verständlich darzustellen (nicht der tatsächliche Inhalt): Es gab die Umfrage mit der Frage "Welches Obst essen Sie gern?" und dann wurde ausgewählt/angeklickt, was man gern isst (und was man nicht gern isst, bleibt nicht ausgewählt).
Die Ergebnisliste zeigt als diese Variablen (Obstsorten) immer mit der Ausprägung 1 (nicht ausgewählt) oder 2 (ausgewählt).
Nun will ich nicht für jede Obstsorte einzeln mit dem Befehl "tally(~Birne,data=EB)" alles auszählen. Das geht doch bestimmt einfacher oder?

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

Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von bigben »

Hallo Thy!

Willkommen im Forum. Für Fragen dieser Art bietet es sich an, ein reproduzierbares Beispiel zu posten, damit wir wirklich gezielt zu Deiner Datenstruktur antworten können. Mehr dazu findest Du im FAQ Unterforum. Ich rate mal, ob ich das mit der Datenstruktur richtig vestanden habe, und mache, weil es Dein erster Post ist, das reproduzierbare Beispiel einfach selbst. Schau mal, was Du mit dem folgenden Code anfangen kannst:

Code: Alles auswählen

library(tibble)
library(magrittr)

# Erst Beispieldaten schaffen
c("moag i", "moag i ned", NA) %>%
  as.factor() %>%
  sample(400, TRUE, c(.3, .6, .1)) %>%
  matrix(ncol = 4) %>%  
  as_tibble(.name_repair = "unique") -> bsp
colnames(bsp) <- c("Apfel", "Birne", "Pflaume", "Sellerie")

# Beispieldaten anschauen:
print(bsp)
 
# Einfacher Weg mit for-Schleife
for(column in 1:ncol(bsp)){
  cat("Auszählung Spalte ");cat(column); cat(" ");cat(colnames(bsp)[column])
  print(table(bsp[,column], useNA = "always"))
}

# mit apply
apply(bsp, 2, table, useNA = "always")

#oder wem das besser gefällt
bsp %>%
  apply(2, table, useNA = "always") %>%
    as_tibble(rownames = "Antwort")
Bestimmt kommt noch jemand und zeigt einen tidy way das Problem zu lösen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
ruedi_br
Beiträge: 159
Registriert: Do Mär 01, 2018 3:53 pm

Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von ruedi_br »

Spontane Idee: 1 nach 0 und 2 nach 1 umcodieren in Zahl wandeln und per colsum spaltenweise summeiren (in diesem Fall=zählen). Oder habe ich das Beispiel falsch verstanden?
VG Ruedi
fortune(111)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von bigben »

Hallo Ruedi,

ob das eine gute oder eine schlechte Idee ist hängt ganz wesentlich davon ab, ob man mit NA rechnen muss. Wenn es wirklich so ist, wie im Eingangspost beschrieben, dass dort immer eine 1 oder eine 2 steht, dann kann man summmieren. Wir wissen aber nicht, welche Teile des Eingangsposts die Daten und welche den Obstvergleich beschreiben. Deshalb hatte ich ich mich für die table Variante entschieden.

Das Umcodieren wäre dafür nichtmal nötig, da man sum auch auf boolesche Vektoren anwenden kann:

Code: Alles auswählen

bsp <- c(1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 2, 1, 2)
sum(bsp == 1)
sum(bsp == 2)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
ruedi_br
Beiträge: 159
Registriert: Do Mär 01, 2018 3:53 pm

Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von ruedi_br »

Das hatte sich so angelassen, als wenn nur 1 oder 2 möglich wären. Mit einem "str" vom Datensatz wären wir schlauer. Und dann natürlich nochmal schneller, wenn die Werte als Int importiert wären. Dann ging das mit

Code: Alles auswählen

Daten_neu <- Daten - 1
und der colsum ratzfatz
VG Ruedi
fortune(111)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von bigben »

ruedi_br hat geschrieben: Mo Apr 12, 2021 11:30 amratzfatz
Gegeben sind 40 Spalten. Ab wievielen Zeilen wirst Du einen ratzfatz-Vorteil von colSums gegenüber apply/table feststellen, den ein Nutzer bemerkt?
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von EDi »

Oder:

Code: Alles auswählen

bsp %>%
  tidyr::pivot_longer(cols = tidyr::everything(), names_to = "Spalte", values_to = "Wert") %>%
  dplyr::count(Spalte, Wert)

Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von bigben »

Cool. Auf die Idee mit dem pivot_longer bin ich jetzt echt nicht gekommen. Danke Dir.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Thy
Beiträge: 7
Registriert: So Apr 11, 2021 5:35 pm

Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen

Beitrag von Thy »

bigben hat geschrieben: So Apr 11, 2021 7:39 pm
# mit apply
apply(bsp, 2, table, useNA = "always")
Das war genau das, was ich gesucht habe!!! Großartig, das erspart mir viel Arbeit!
Vielen Dank für die schnelle Hilfe!
Antworten