Übernahme von Werten anderer Spalte, wenn Zelle leer

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
kosa
Beiträge: 27
Registriert: Mo Sep 02, 2019 6:47 pm

Übernahme von Werten anderer Spalte, wenn Zelle leer

Beitrag von kosa »

Liebe Community,

ich habe eine weitere Frage zur Datenbereinigung. In einer Umfrage wurden Personen zweimal zu den selben Variablen befragt, wodurch ich im wide-format die Variablen für den ersten Zeitpunkt die Endung .x und der zweiten Befragung, die Endung .y haben. Es gibt nun eine Variable "Ortsteil" (im Code: residence), die nicht alle Personen zu beiden Messzeitpuntken ausgefüllt haben.

Daher habe ich versucht eine neue Variable (residence.fixed) zu erstellen, in der zunächst die Angeben aus der ersten Befragung reinkopiert wurden. Fehlende Werte zum ersten Zeitpunkt, wollte ich dann "auffüllen" falls vorhanden. Hier mein Versuch:

Code: Alles auswählen

dat$residence.fixed <- dat$residence.x
dat$residence.fixed[dat$residence.x == "" & !is.na(dat$residence.y)] <- dat$residence.y
Leider habe ich sehr schnell gemerkt, dass R dann nicht die Angabe zum Ortsteil derselben Person zum zweiten Messzeitpunkt reinkopiert. Sondern konsekutiv, die in der Variable gespeicherten Angaben nimmt.

Meine Frage: Wie kann ich das "Auffüllen" des Ortsteils auf die Angaben derselben Person beziehen?

Hier ein Beispiel:

Code: Alles auswählen

data <- data.frame(
  code.x = c("AH6M","BD7M","SH9L"),
  code.y = c("AH6M","BD7M","SH9L")
  residence.x = c("Wald","NA","NA"),
  residence.y = c("Wald","Schloss","NA")

Die neue Variable "residence.fixed" sollte folgenden Inhalt haben: residence.fixed: Wald, Schloss, NA.
(Anmerkung: Da es auch bei residence.y fehlende Werte gibt, kann ich leider nicht einfach residence.y nehmen.)

Kann mir jemand helfen?

Vielen Dank und viele Grüße!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Übernahme von Werten anderer Spalte, wenn Zelle leer

Beitrag von bigben »

Hallo kosa,

schön, dass Du Dich jetzt im besseren Forum angemeldet hast.

Wie gefällt Dir folgender Ansatz mit ifelse?

Code: Alles auswählen

data <- data.frame(
  code.x = c("AH6M","BD7M","SH9L", "IIII"),
  code.y = c("AH6M","BD7M","SH9L", "IIII"),
  residence.x = c("Wald", NA, NA, "Wald"),
  residence.y = c("Wald","Schloss", NA, NA))

data$residence.common <- ifelse(test = is.na(data$residence.x), 
                                yes = data$residence.y, 
                                no = data$residence.x
                         )

print(data)
Ich habe in Deinem reproduzierbaren Beispiel die "NA" mit Anführungszeichen durch NA ohne Anführungszeichen ersetzt. Das eine ist der String mit den zwei Buchstaben N und A und das andere codiert fehlende Daten.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
kosa
Beiträge: 27
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Übernahme von Werten anderer Spalte, wenn Zelle leer

Beitrag von kosa »

Super, danke für die schnelle Hilfe.

Es hat erst nicht funktioniert, da neben NA auch einfach leere Zellen ("") da waren. Ich habe dann aber alle leere Zellen in NAs umgewandelt, dann hat es einwandfrei funktioniert. :)

Danke vielmals!

P.s.: das Forum ist wirklich klasse!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Übernahme von Werten anderer Spalte, wenn Zelle leer

Beitrag von bigben »

Hi,

alles in NA umwandeln ist bestimmt der bessere Ansatz. Man hätte aber auch das

Code: Alles auswählen

is.na(data$residence.x)
durch ein

Code: Alles auswählen

data$residence.x == ""
ersetzen können, wenn jetzt irgendetwas gegen die NA gesprochen hätte.

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten