2 Variablen auf fehlende Werte/Personen untersuchen
2 Variablen auf fehlende Werte/Personen untersuchen
Hi ihr Lieben,
Ich habe folgendes Problem ich habe mit merge 2 Datensätze zusammen gefügt (Strategie_Basis_Daten <- merge(Strategie.Daten, Basis_Daten, by="CODE"), dabei sind 3 Personen "verloren" gegangen, da sie anscheinend nicht im Basis-Datensatz vorhanden sind. Ich versuche jetzt den Code dieser Personen herauszufinden (da es sich um über 500 Personen handelt ist das händisch schlecht machbar). Ich möchte also die Variable CODE (string/Zeichenvariable) der beiden Datensätzen Strategie.Daten (512 Pers.) und Strategie_Basis_Daten (509 Pers.) vergleichen und mir den Code der fehlenden Personen ausgeben lassen. Ist das möglich?
Ich bin leider ein kompletter Neuling in R und sitze am meiner Masterarbeit.
Ich hoffe jemand hat eine Idee.
LG
Lea
Ich habe folgendes Problem ich habe mit merge 2 Datensätze zusammen gefügt (Strategie_Basis_Daten <- merge(Strategie.Daten, Basis_Daten, by="CODE"), dabei sind 3 Personen "verloren" gegangen, da sie anscheinend nicht im Basis-Datensatz vorhanden sind. Ich versuche jetzt den Code dieser Personen herauszufinden (da es sich um über 500 Personen handelt ist das händisch schlecht machbar). Ich möchte also die Variable CODE (string/Zeichenvariable) der beiden Datensätzen Strategie.Daten (512 Pers.) und Strategie_Basis_Daten (509 Pers.) vergleichen und mir den Code der fehlenden Personen ausgeben lassen. Ist das möglich?
Ich bin leider ein kompletter Neuling in R und sitze am meiner Masterarbeit.
Ich hoffe jemand hat eine Idee.
LG
Lea
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
Hallo Lea,
dafür gibt es Parameter bei merge().
Schau mal in die Doku.
all = ..., all.x = ..., all.y = ...
... anschließend schauen, wo im Ergebnis von merge() NAs sind.
Gruß, Jörg
dafür gibt es Parameter bei merge().
Schau mal in die Doku.
all = ..., all.x = ..., all.y = ...
... anschließend schauen, wo im Ergebnis von merge() NAs sind.
Gruß, Jörg
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
Halloi Lea,
ich glaube, Du kannst Dir den Vergleich mit setdiff basteln. Das beantwortet die Frage "Was ist in der erstgenannten Menge drin, was in der zweiten nicht drin ist. Vorsichtig, es kommt auf die Reihenfolge der Argumente an. Zur Erläuterung:
Code: Alles auswählen
a <- c("Frank", "Steffi", "Hans")
b <- c("Hubert", "Steffi")
setdiff(a, b)
setdiff(b, a)
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
Vielen Dank hat wunderbar geklappt!
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
hier noch eine kleine Spielerei von mir:
Gruß, Jörg
Code: Alles auswählen
a <- c("Frank", "Steffi", "Hans", "Steffi", "Hans")
b <- c("Hubert", "Steffi")
setdiff(a, b)
unique(a[!(a %in% b)]) ## gleiches Ergebnis wie setdiff(a, b)
table(a)
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
Vielen Dank für eure Antworten. Ich habe die fehlenden Werte mit Jörgs Vorschlag (merge und dann NA anschauen) relativ schnell entdeckt. Anscheinend ist ein Fehler in der Kodierung der Personen passiert. Diesen möchte ich jetzt beheben und habe es so ausprobiert:
hier bekomme ich dann jeweils integer(0) als Ausgabe
das Ersetzen hat also nicht funktioniert (ich bekomme allerdings keine Fehlermeldung sondern eine Liste mit den Codes als Ausgabe). Ich habe das ganze auch schon mit gsub ausprobiert, aber leider funktioniert das auch nicht
Weiß jemand wo mein Fehler liegt?
Code: Alles auswählen
str_replace(CODE, "A524P16", "A524P17") #ich möchte also den Code A524P16 mit dem Code A524P17 ersetzen
str_replace(CODE, "A600P17", "A600P16")
str_replace(CODE, "A234P18", "A234P17")
Code: Alles auswählen
grep("A524P17", CODE)
grep("A600P16", CODE)
grep("A234P17", CODE)
das Ersetzen hat also nicht funktioniert (ich bekomme allerdings keine Fehlermeldung sondern eine Liste mit den Codes als Ausgabe). Ich habe das ganze auch schon mit gsub ausprobiert, aber leider funktioniert das auch nicht
Weiß jemand wo mein Fehler liegt?
Zuletzt geändert von jogo am Di Jun 09, 2020 3:29 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
Etwas in der Art?
LG,
Bernhard
Code: Alles auswählen
# Zeilen finden
zeilennr <- which(Strategie_Basis_Daten$Code == "A524P16")
# Zeile ändern
Strategie_Basis_Daten[zeilennr, "Code"] <- "A524P17"
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
Hi Bernhard,
danke für die Idee.
mit grep habe ich allerdings die Stelle identifiziert und es so versucht:
dann bekomme ich folgende Warnmeldung:
Ich nehme mal an weil "CODE" zwar Zeichen enthält ich aber dies beim einlesen mit SPSS nicht als Zeichenvektor deklariert habe (sondern R es als Faktor abgespeichert hat). Also habe ich dies beim einlesen angepasst und den Zusatz "stringsAsFactors = FALSE" eingefügt . Jetzt funktioniert es (aber nur wenn ich keinen Datensatz attached habe!)
Vielen Dank!
Leider ist nun ein neues Problem aufgetreten als ich versucht habe die Datensätze (Strategie und Basis) wieder zusammenzufügen:
#hier entsteht ein Datensatz mit null Observation (bzw. Personen). Komischerweise funktioniert dies nur mit diesen beiden Datensätzen nicht. Ich habe auch noch mal versucht mit der alten Syntax und "CODE" als Faktor (also wie es vorher war) den Datensatz zu berechnen und wieder entsteht ein Datensatz mit null observations
Wäre klasse, wenn jemand einen Rat weiß! Entschuldigt bitte das ich so viele Fragen habe! Wie gesagt R ist mir noch sehr fremd.
danke für die Idee.
Code: Alles auswählen
zeilennr <- which(Strategie_Basis_Daten$Code == "A524P16") # hier kommt nur integer(0) raus
Code: Alles auswählen
# Zeile ändern
Strategie.Daten[252, "CODE"] <- "A524P16"
dann bekomme ich folgende Warnmeldung:
Code: Alles auswählen
Warnmeldung:
In `[<-.factor`(`*tmp*`, iseq, value = "6524P16") :
invalid factor level, NA generated
Vielen Dank!
Leider ist nun ein neues Problem aufgetreten als ich versucht habe die Datensätze (Strategie und Basis) wieder zusammenzufügen:
Code: Alles auswählen
Strategie_Basis_Daten_kor <- merge(Strategie.Daten, Basis_Daten, by="CODE")
Code: Alles auswählen
Test <- merge(Outcome, Praediktoren, by="CODE")
# dies hier funktioniert hingegeben wieder. Es scheint also nicht an dem Zeichenvektor zu liegen.
Zuletzt geändert von jogo am Mi Jun 10, 2020 1:58 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
Da wäre jetzt ein reproduzierbares Minimalbeispiel angebracht:
https://stackoverflow.com/help/minimal- ... le-example
viewtopic.php?f=20&t=11
LG,
Bernhard
https://stackoverflow.com/help/minimal- ... le-example
viewtopic.php?f=20&t=11
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: 2 Variablen auf fehlende Werte/Personen untersuchen
Hey hab hier mal ein vereinfachtes Beispiel erstellt. Dieses funktioniert jedoch
# der Datensatz enthält normalerweise mehrere ordinalskallierte Variablen (welche nicht in Datensatz4 enthalten sind ) und die Variable CODE (als ID für #die Person),dieser besteht aus Zahlen und Buchstaben und stimmt mit den CODE-Namen aus Datensatz 4 bei 500 Personen überein
Code: Alles auswählen
library(foreign)
library(plyr)
library(dplyr)
library("car")
library(stringr)
# orginal Datensatz: Datensatz1 <- read.spss("Datensatz1", to.data.frame = TRUE, use.value.labels = FALSE, stringsAsFactors = FALSE)
# hab ich jetzt hier nicht ganz perfekt mal als Beispiel vereinfacht:
CODE <- c("AB1","AB1","CD2","CD2","EF3")
as.character(CODE)
Variable1 <- c(1,3,2,1,3)
DatensatzMatrix1 <- rbind(CODE,Variable1)
Datensatz1 <- as.data.frame(t(DatensatzMatrix1))
rm(CODE)
Code: Alles auswählen
library(tidyr)
attach(Datensatz1)
Personenebene <- group_by(Datensatz1, CODE)
Datensatz2 <- summarise(Personenebene, MW_Variable1 = mean(Variable1,na.rm = TRUE))
#hier gibt es eine Fehlermeldung, aber nur in diesem Bsp. bei meinen Datensätzen funktioniert es. Daher uninteressant für mich.
detach(Datensatz1)
rm(Personenebene)
CODE <- c("AB1","CD2", "EF3", "GH4")
as.character(CODE)
Variable2 <- c(1,2,3,4)
DatensatzMatrix2 <- rbind(CODE,Variable2)
Datensatz3 <- as.data.frame(t(DatensatzMatrix2))
#Der orginal Datensatz: (Datensatz3 <-read.spss("Datensatz3", to.data.frame = TRUE, use.value.labels = FALSE, stringsAsFactors = FALSE) )
# enthält mehrere Variablen und Personen (CODE) die nicht im vorherigen Datensatz vorhanden sind,
# nicht enthaltene Personen sollen wegfallen die Variablen bzw. Werte auf den Variblen
# für die Personen in Datensatz 2 jedoch nicht daher dieser Ansatz:
Datensatz4 <- merge(Datensatz2, Datensatz3, by="CODE")
# das komische: hier funktioniert merge wieder. bei mir kommt jedoch ein Datensatz mit 0 observations raus :?:
Zuletzt geändert von jogo am Do Jun 11, 2020 2:15 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29