Seite 1 von 1
Selektieren nach Gruppe
Verfasst: Sa Jan 09, 2021 2:40 pm
von zinbu
Hallo zusammen,
ich habe folgendes Problem:
Ich habe diesen Datensatz und möchte nun herausfinden, ob für jeden "Name" ein "Wert" existiert. Falls in einem "Name" nur NA vorkommen, sollen diese den Wert "4" annehmen für alle Zeilen dieses Namens, für alle anderen NA die bei einem "Name" vorkommen der auch einen existierenden "Wert" hat, soll weiterhin NA stehen bleiben.
Code: Alles auswählen
Name<-c("A","A","B","B","C","C","C","D")
Wert<-c(1,NA,NA,NA,1,2,NA,3)
beispiel<-cbind(Name,Wert)
Die Ausgabe für "Wert" soll hier zb für alle "B" 4 sein, alle anderen NA sollen bestehen bleiben.
Danke schonmal

Re: Selektieren nach Gruppe
Verfasst: Sa Jan 09, 2021 3:38 pm
von jogo
Hallo zinbu,
cbind() ist hier nicht gut. Besser ist data.frame().
Code: Alles auswählen
beispiel <- data.frame(Name=c("A","A","B","B","C","C","C","D"), Wert=c(1,NA,NA,NA,1,2,NA,3))
... und dann
Gruß, Jörg
Re: Selektieren nach Gruppe
Verfasst: Sa Jan 09, 2021 4:36 pm
von zinbu
Hallo Jörg,
danke für deine Antwort.
Gibt es auch eine Möglichkeit, die den Datensatz automatisch nach diesen Kriterien verändert?
Mein richtiger Datensatz ist zu groß und unübersichtlich, als dass ich das für jede Gruppe "von Hand" überprüfen könnte...
Re: Selektieren nach Gruppe
Verfasst: So Jan 10, 2021 3:20 pm
von jogo
Hallo zinbu,
ich verstehe nicht recht, was Du meinst. Kannst Du bitte nochmal ein etwas größeres Beispiel zeigen.
Was ist bei Dir "Gruppe"?
Gruß, Jörg
Re: Selektieren nach Gruppe
Verfasst: So Jan 10, 2021 5:39 pm
von zinbu
Hallo Jörg,
mit Gruppe meine ich hier eine Gruppe von "Namen", also zb alle "B"
Code: Alles auswählen
beispiel <- data.frame(Name=c("A","A","B","B","C","C","C","D","E","E"), Wert=c(1,NA,NA,NA,1,2,NA,3,NA,NA))
In meinem Datensatz geht es so noch sehr lange weiter. Ich möchte nun überprüfen welche "Namen" das Kriterium erfüllen "alle zugehörigen Werte ausschließlich NA".
In diesem Beispiel müssten nun zb. alle "B" und alle "E" zu 4 werden, alles übrige soll so belassen werden.
Re: Selektieren nach Gruppe
Verfasst: So Jan 10, 2021 6:09 pm
von bigben
So
Code: Alles auswählen
beispiel <- data.frame(Name=c("A","A","B","B","C","C","C","D", "E"), Wert=c(1,NA,NA,NA,1,2,NA,3,5))
# alle "B" und alle "E" zu 4 werden, alles übrige soll so belassen werden.
beispiel$Wert[beispiel$Name %in% c("B", "E")] <- 4
print(beispiel)
LG,
Bernhard
Re: Selektieren nach Gruppe
Verfasst: Mo Jan 11, 2021 8:41 am
von jogo
Vielleicht geht es auch um die automatisierte Feststellung, welche Gruppen bei
Wert nur NAs haben?!
also etwa so:
Code: Alles auswählen
beispiel <- data.frame(Name=c("A","A","B","B","C","C","C","D","E","E"),
Wert=c(1,NA,NA,NA,1,2,NA,3,NA,NA))
names(which(with(beispiel, tapply(is.na(Wert), Name, all))))
Alles zusammen könnte so aussehen:
Code: Alles auswählen
beispiel <- data.frame(Name=c("A","A","B","B","C","C","C","D","E","E"),
Wert=c(1,NA,NA,NA,1,2,NA,3,NA,NA))
Gruppen <- names(which(with(beispiel, tapply(is.na(Wert), Name, all))))
beispiel$Wert[beispiel$Name %in% Gruppen] <- 4
beispiel
Gruß, Jörg
Re: Selektieren nach Gruppe
Verfasst: Mo Jan 11, 2021 12:50 pm
von zinbu
Hallo Jörg,
genau danach habe ich gesucht. Danke dir
