Seite 1 von 1

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

Verfasst: So Apr 11, 2021 5:43 pm
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!!

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

Verfasst: So Apr 11, 2021 7:39 pm
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

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

Verfasst: Mo Apr 12, 2021 10:34 am
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

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

Verfasst: Mo Apr 12, 2021 11:07 am
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

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

Verfasst: Mo Apr 12, 2021 11:30 am
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

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

Verfasst: Mo Apr 12, 2021 11:49 am
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?

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

Verfasst: Mo Apr 12, 2021 6:52 pm
von EDi
Oder:

Code: Alles auswählen

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


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

Verfasst: Mo Apr 12, 2021 7:46 pm
von bigben
Cool. Auf die Idee mit dem pivot_longer bin ich jetzt echt nicht gekommen. Danke Dir.

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

Verfasst: Sa Apr 17, 2021 6:09 pm
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!