Selektieren nach Gruppe

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
zinbu
Beiträge: 22
Registriert: Fr Mai 08, 2020 10:38 am

Selektieren nach Gruppe

Beitrag 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 :)
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Selektieren nach Gruppe

Beitrag 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
zinbu
Beiträge: 22
Registriert: Fr Mai 08, 2020 10:38 am

Re: Selektieren nach Gruppe

Beitrag 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...
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Selektieren nach Gruppe

Beitrag 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
zinbu
Beiträge: 22
Registriert: Fr Mai 08, 2020 10:38 am

Re: Selektieren nach Gruppe

Beitrag 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.
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Selektieren nach Gruppe

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Selektieren nach Gruppe

Beitrag 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
zinbu
Beiträge: 22
Registriert: Fr Mai 08, 2020 10:38 am

Re: Selektieren nach Gruppe

Beitrag von zinbu »

Hallo Jörg,

genau danach habe ich gesucht. Danke dir :)
Antworten