Seite 1 von 1

Case_when: logical not double vector

Verfasst: Do Jan 16, 2020 12:48 am
von Karo
Hallo miteinander

Ich bin "Neuling" und brauche etwas Hilfe... ich habe eine Tabelle mit Firmendaten, welche ich in klein, mittlere und grosse Unternehmen unterteilen will.

Daten sehen so aus:
Firma; Anzahl Mitarbeiter
AA; 20
BB; 5
CC; 77
etc.

ich wollte nun eine Spalte erstellen, worin steht: "klein 1 - 10", "mittel 11 - 99", gross 100 -".

Der Code sieht so aus:
data %>%
select(`Number of employees`) %>%
mutate(
Sizes = case_when(
`Number of employees` = 0 - 10 ~ "Klein(1 to 10)",
`Number of employees` = 11 - 100 ~ "Mittel (11 to 100)",
`Number of employees` = 101 - 1000 ~ "Gross (über 100)"
))

Leider kriege ich die Fehlermeldung:
Error: LHS of case 1 (`0 - 10`) must be a logical vector, not a double Vector

mein Feld hat dbl Format und hat nur Zahlen drin. Muss ich das Format ändern oder hab ich einen Fehler drin?

Könnt ihr mir weiterhelfen?
DANKE!

Re: Case_when: logical not double vector

Verfasst: Do Jan 16, 2020 7:27 am
von bigben
Hallo!

Wäre das nicht viel einfacher mit cut zu erledigen?

Code: Alles auswählen

NoEmployees <- c(0, 10, 11, 50, 100, 1000, 10)

cut(NoEmployees, breaks=c(-1, 10.5, 100.5, Inf), labels=c("klein", "mittel", "groß"))

also für Dich sowas in der Art von

Code: Alles auswählen

data$Sizes <- cut(data$`Number of employees`, breaks=c(-1, 10.5, 100.5, Inf),  
                  labels=c("klein (1-10)", "mittel (11-100)", "groß (> 100)"))
LG,
Bernhard

Re: Case_when: logical not double vector

Verfasst: Do Jan 23, 2020 12:20 am
von Karo
Hey! Danke, hat funktioniert. lg Karo

Re: Case_when: logical not double vector

Verfasst: Do Jan 23, 2020 10:03 am
von ruedi_br
Noch ein Hinweis:

Code: Alles auswählen

`Number of employees` = 0 - 10 ~ "Klein(1 to 10)",
beinhaltet eine Zuweisung: "=", ein logischer Vergleich ginge mit "==".
Ansonsten ist cut natürlich viel schöner, weil nicht aus dem tidyverse ;)
Grüße
Ruedi

Re: Case_when: logical not double vector

Verfasst: Do Jan 23, 2020 1:28 pm
von bigben
Hallo Ruedi,
ruedi_br hat geschrieben: Do Jan 23, 2020 10:03 ambeinhaltet eine Zuweisung: "=", ein logischer Vergleich ginge mit "==".
Ein Einzelwert kann ja nicht gleich einem Intervall sein, daher wäre '==' kein logischer, sondern ein unlogischer Vergleich ;)

Spaß beiseite, ich hab mal eine Programmiersprache gesehen, ich glaube es war Haskell, da kann man echt in Unicode programmieren. Da ließe sich eine Variable λ und eine Funktion dann auch '∈' nennen oder '⊂' oder '⊆'.
Ansonsten ist cut natürlich viel schöner, weil nicht aus dem tidyverse ;)
:mrgreen:

LG,
Bernhard

Re: Case_when: logical not double vector

Verfasst: Do Jan 23, 2020 3:39 pm
von ruedi_br
und wenn es denn partout tidyverse sein soll, wäre ein fct_collpase innerhalb des mutate eine gute Idee.
Grüße
Ruedi

Re: Case_when: logical not double vector

Verfasst: Do Jan 23, 2020 4:20 pm
von bigben
@Ruedi Coole Funktion, die ich bisher nicht kannte. Was ich gerade über das forcats package gelesen habe gefällt mir sehr gut. Aber wenn ich über fct_collapse lese, dann ist das für factors, nicht für numerischen Input. Karos Mitarbeiterzahlen dürften integer sein?