Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

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

Moderatoren: EDi, jogo

Antworten
KaSa
Beiträge: 1
Registriert: Sa Jul 06, 2019 7:09 pm

Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

Beitrag von KaSa » Sa Jul 06, 2019 7:16 pm

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.

Hufeisen
Beiträge: 122
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

Beitrag von Hufeisen » Sa Jul 06, 2019 9:32 pm

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
Zuletzt geändert von Hufeisen am So Jul 07, 2019 11:00 am, insgesamt 1-mal geändert.

Benutzeravatar
student
Beiträge: 337
Registriert: Fr Okt 07, 2016 9:52 am

Re: Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

Beitrag von student » So Jul 07, 2019 10:51 am

Hallo KaSA,

vielleicht hilft recode() weiter?
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de: https://www.faes.de
Datenanalyse mit R: https://www.r-statistik.de
Ad-Oculos-Projekt: https://www.ad-oculos.faes.de

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)

bigben
Beiträge: 1057
Registriert: Mi Okt 12, 2016 9:09 am

Re: Merkmalsausprägungen einer Variable zusammenfassen bzw. reduzieren

Beitrag von bigben » Mi Jul 24, 2019 2:47 pm

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

Antworten