Seite 1 von 1

Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

Verfasst: Sa Jul 06, 2019 7:16 pm
von KaSa
Hallo liebes Forum,

ich bin langsam am Verzweifeln

Ich habe eine Variable mit sechs verschiedenen Ausprägungen
1) Berufstätig ohne Kind
2) Berufstätig mit Kind im Haushalt
3) Berufstätig mit Kind nicht im Haushalt
4) Nicht berufstätig ohne Kind
5) Nicht berufstätig mit Kind im Haushalt
6) Nicht berufstätig mit Kind nicht im Haushalt

Ich würde gerne den Datensatz so anpassen, dass meine Variable statt sechs Ausprägungen nur noch zwei hat. Ich möchte Ausprägung 1 und 4 zusammenfassen und 2,3,5 und 6.
Der neue Merkmalsausprägungsaufbau sollte dann entsprechend so aussehen:
1) Gruppe ohne Kinder
2) Gruppe mit Kindern

Ich habe es mit folgendem Befehl versucht:

Code: Alles auswählen

Statusunab <-cut(WU$Status, breaks= c(1&4,2&3&5&6), labels=c("Gruppe ohne Kinder", "Gruppe mit Kindern"))
Error Anzeige:

Code: Alles auswählen

Error in cut.default(WU$Status, breaks = c(1 & 4, 2 &  : 
  'breaks' sind nicht eindeutig
Die Daten kommen aus einer Interviewreihe.

Leider finde ich hierzu scheinbar keine passende Funktion bzw. Befehl für R.
Kann mir hier jemand helfen?

Vielen lieben Dank vorab.

Re: Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

Verfasst: Sa Jul 06, 2019 9:32 pm
von Hufeisen
Hallo, ich bin mit dem Befehl cut nicht vertraut. Deshalb kann ich nichts darüber sagen, warum Dein Befehl eine Fehlermeldung ausgibt. In der Hilfe zum Befehl habe ich aber keinen Hinweis auf das Zeichen „&“ gefunden, vielleicht kommt daher die Fehlermeldung.

Dennoch denke ich, dass Dein Problem leicht zu lösen ist. Wenn ich es richtig verstanden habe.

Code: Alles auswählen

# Beispieldaten erstellen
set.seed(1) # Startwert des Zufallsgenerators für reproduzierbare Ergebnisse 
WU <- data.frame(Status = sample(1:6, 15, replace = TRUE))

# Merkmalsausprägungen zusammenfassen

  # neue Kodierung
  WU$Status_Kind_num[WU$Status %in% c(2, 3, 5, 6)] <- 1
  WU$Status_Kind_num[WU$Status %in% c(1, 4)] <- 2

  # Label
  WU$Status_Kind_lab[WU$Status %in% c(2, 3, 5, 6)] <- "Gruppe mit Kindern"
  WU$Status_Kind_lab[WU$Status %in% c(1, 4)] <- "Gruppe ohne Kinder"

# Output
WU
   Status Status_Kind_num    Status_Kind_lab
1       2               1 Gruppe mit Kindern
2       3               1 Gruppe mit Kindern
3       4               2 Gruppe ohne Kinder
4       6               1 Gruppe mit Kindern
5       2               1 Gruppe mit Kindern
6       6               1 Gruppe mit Kindern
7       6               1 Gruppe mit Kindern
8       4               2 Gruppe ohne Kinder
9       4               2 Gruppe ohne Kinder
10      1               2 Gruppe ohne Kinder
11      2               1 Gruppe mit Kindern
12      2               1 Gruppe mit Kindern
13      5               1 Gruppe mit Kindern
14      3               1 Gruppe mit Kindern
15      5               1 Gruppe mit Kindern
Grüße Hufeisen

Re: Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

Verfasst: So Jul 07, 2019 10:51 am
von student
Hallo KaSA,

vielleicht hilft recode() weiter?

Re: Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

Verfasst: Mi Jul 24, 2019 2:47 pm
von bigben
Hi!

cut() ist die falsche Funktion für das, was Du machen willst. Manchmal ist es -gerade am Anfang- in R einfacher, eine Funktion selbst zu schreiben, als mit den eingebauten Funktionen umgehen zu lernen. Wir zerlegen das Problem im Teilschritte und schreiben uns einfach selbst eine Funktion, die erstmal nur einen einzigen Gruppencode umwandelt:

Code: Alles auswählen

gruppiere <- function(x){
  if(!(x %in% 1:6)){   # sicherheitshalber prüfen, ob valide Eingabe
    warning("Kann keine Gruppen umwandeln, die nicht vorgesehen sind.")
    return(NA)
  }
  if( x==1 | x==4){      # Fall ohne Kind
    return("ohne Kind") 
  }
  return("mit Kind")     # sonst Fall mit Kind
}
Die wandelt jetzt ein einzelnes Ergebnis passend um.

Code: Alles auswählen

> gruppiere(1)
[1] "ohne Kind"
> gruppiere(2)
[1] "mit Kind"
> gruppiere(4)
[1] "ohne Kind"
> gruppiere(0)
[1] NA
Warning message:
In gruppiere(0) : Kann keine Gruppen umwandeln, die nicht vorgesehen sind.
> 
Wir wollen aber wahrscheinlich ganze Vektoren solcher Ergebnisse umwandeln, dafür hilft es, die Funktion zu vektorisieren:

Code: Alles auswählen

gruppiere <- Vectorize(gruppiere)
Und das sollte jetzt ungefähr so funktionieren, wie Du willst:

Code: Alles auswählen

alte_gruppierung = c(1,1,4,2,3,1)

print(gruppiere(alte_gruppierung))
LG,
Bernhard