Case_when: logical not double vector

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
Karo
Beiträge: 4
Registriert: So Jan 12, 2020 4:56 pm

Case_when: logical not double vector

Beitrag 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!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Case_when: logical not double vector

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Karo
Beiträge: 4
Registriert: So Jan 12, 2020 4:56 pm

Re: Case_when: logical not double vector

Beitrag von Karo »

Hey! Danke, hat funktioniert. lg Karo
ruedi_br
Beiträge: 159
Registriert: Do Mär 01, 2018 3:53 pm

Re: Case_when: logical not double vector

Beitrag 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
fortune(111)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Case_when: logical not double vector

Beitrag 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
---
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: Case_when: logical not double vector

Beitrag 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
fortune(111)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Case_when: logical not double vector

Beitrag 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?
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten