Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen
Moderator: jogo
Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen
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!!
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
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:
Bestimmt kommt noch jemand und zeigt einen tidy way das Problem zu lösen.
LG,
Bernhard
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")
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen
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
VG Ruedi
fortune(111)
Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen
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:
LG,
Bernhard
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)
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen
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 und der colsum ratzfatz
VG Ruedi
Code: Alles auswählen
Daten_neu <- Daten - 1
VG Ruedi
fortune(111)
Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen
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
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen
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
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
![Bild](https://i.creativecommons.org/l/by/4.0/88x31.png)
Re: Mehrere Variablen und deren Ausprägungen mit einem Befehl zählen
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
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte