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

Code: Alles auswählen

beispiel$Wert[beispiel$Name=="B"] <- 4
beispiel
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 :)