Seite 1 von 1

Rekodierung "NA" zuordnen

Verfasst: Mi Mär 22, 2017 12:21 pm
von Schlesinger
Hallo R-Forum,

ich habe einen Merkmalsträger mit 4 Ausprägungen: Trifft nicht zu, Ja, Nein und Keine Angabe.
Für meine weiteres Vorgehen brauche ich nur die 2 Ausprägungen Nein und Ja, die ich als 0 und 1 kodieren möchte. Die restlichen (Trifft nicht zu und Keine Angabe) möchte ich NA's zuordnen.

Code: Alles auswählen

Datensatz$Linkshänder <- Datensatz$L22
Datensatz$Linkshänder[Datensatz$L22==0] <- NA # Trifft nicht zu (nicht bestimmbar)
Datensatz$Linkshänder[Datensatz$L22==9] <- NA # Keine Angabe
Datensatz$Linkshänder[Datensatz$L22==1] <- 1  # Linkshänder
Datensatz$Linkshänder[Datensatz$L22==2] <- 0  # Kein Linkshänder
Datensatz$Linkshänder <- as.factor(Datensatz$Linkshänder)
table(Datensatz$L22,Datensatz$Linkshänder)
Wenn ich nun

Code: Alles auswählen

Datensatz$Linkshänder[Datensatz$L22==0] <- NA # Trifft nicht zu (nicht bestimmbar)
Datensatz$Linkshänder[Datensatz$L22==9] <- NA # Keine Angabe
ausführe gibt es keine Problemmeldung, wenn ich mir dann aber die Zuordnung anschaue:

Code: Alles auswählen

table(Datensatz$L22,Datensatz$Linkshänder)
werden weiterhin Personen bei "Trifft nicht zu" und "Keine Angabe" angezeigt und bei "NA" steht weiterhin 0.

Vermutlich habe ich einen einfachen Anfängerfehler gemacht - aber wo? :oops:

Re: Rekodierung "NA" zuordnen

Verfasst: Mi Mär 22, 2017 12:39 pm
von jogo
Hallo Schlesinger,

handelt es sich bei Datensatz$L22 und Datensatz$Linkshänder um Faktoren?
Faktoren behalten in ihrer Definition auch die levels, für die es kein Element mit diesem Wert gibt - da hilft ggf. nur droplevels()
Was liefert denn

Code: Alles auswählen

summary(Datensatz$L22)
summary(Datensatz$Linkshänder)
Gruß, Jörg

Re: Rekodierung "NA" zuordnen

Verfasst: Mi Mär 22, 2017 1:20 pm
von Schlesinger
Also Summary liefert:

> summary(Datensatz$L22)
TRIFFT NICHT ZU: 4 JA: 833 NEIN: 1085 KEINE ANGABE: 6
> summary(Datensatz$Linkshänder)
TRIFFT NICHT ZU: 4 JA: 833 NEIN: 1085 KEINE ANGABE: 6


Es sollte aber so aussehen:
> summary(Datensatz$L22)
TRIFFT NICHT ZU: 4 JA: 833 NEIN: 1085 KEINE ANGABE: 6

> summary(Datensatz$Linkshänder)
TRIFFT NICHT ZU: 0 JA: 833 NEIN: 1085 KEINE ANGABE: 0 NA: 10



Also ich möchte später z.B. Regressionen oder Hypothesen-Tests durchführen, deshalb möchte ich aber die "Trifft Nicht zu" und "Keine Angaben" rausschmeißen bzw. "NA" zuordnen - ich versteh nicht warum er mir keine Fehlermeldung bei der Zuordnung gibt (es also scheinbar ausführt) aber, wenn ich mir mit z.B. Summary die Zuordnungen anzeigen lasse alles unverändert angezeigt wird.

Re: Rekodierung "NA" zuordnen

Verfasst: Mi Mär 22, 2017 1:55 pm
von jogo
ok, damit hast Du implizit meine Frage beantwortet:
es handelt sich sehr wohl um Faktoren.

Es gibt noch eine weitere Eigenschaft von Faktoren, die für Dich hinderlich ist:
Faktoren nehmen keine zusätzlichen levels auf - insbesondere NA bereitet zusätzliche Schwierigkeiten.

Gruß, Jörg
p.s.: Kannst Du dput(Datensatz$L22) liefern?

Re: Rekodierung "NA" zuordnen

Verfasst: Mi Mär 22, 2017 2:10 pm
von Schlesinger
Wenn ich den Befehl ausführe wird nur der Befehl angezeigt sonst nichts :?

Re: Rekodierung "NA" zuordnen

Verfasst: Mi Mär 22, 2017 2:24 pm
von jogo
Hier ein kleines Beispiel:

Code: Alles auswählen

L22 <- rep(as.factor(c("TRIFFT NICHT ZU", "JA", "NEIN", "KEINE ANGABE")), c(4, 833, 1085, 6) )
summary(L22)

sum(L22==0)
sum(L22==9)
sum(L22==1)
sum(L22==0)

# oder kurz
table(as.integer(L22))
Zumindest ist jetzt klar, warum keine Ersetzung/Rekodierung erfolgt ist.
Wie kommst Du darauf einen Faktor, der nur vier levels hat, zu testen, ob er den Wert 9 annehmen könnte?
war das die ursprüngliche Kodierung?

Du möchtest dies:

Code: Alles auswählen

library("car")

Linksh <- recode(L22, "c('TRIFFT NICHT ZU', 'KEINE ANGABE')=NA; 'JA'=1; 'NEIN'=0")
table(Linksh)
summary(Linksh) # oder table(Linksh, useNA = "ifany")
Gruß, Jörg

Re: Rekodierung "NA" zuordnen

Verfasst: Mi Mär 22, 2017 4:02 pm
von Schlesinger
Genau das war die Ursprungskodierung ;)

Ja ich hab jetzt auf jeden Fall meinen Fehler erkannt - vielen Dank ! ;) :)