2016-04-22 12 views
0

Ich versuche das entsprechende Element in der Spalten-ID basierend auf einer kombinierten Bedingung zu finden, wenn die Spalte GROUP gleich 2 ist und der Maximalwert in der Spalte OBS.R: Wie finde ich Elemente in einer Spalte basierend auf kombinierten Bedingungen in anderen Spalten?

Wie wird diese Aufgabe in R ausgeführt?

Hier ist meine Daten-Set:

ID <- as.factor(c("A","B","C","D","E","F")) 
OBS <- c(1,3,2,8,3,10) 
GROUP <- as.factor(c(1,1,1,2,2,2))  
df <- data.frame(ID,OBS,GROUP) 

Vielen Dank.

+1

Was haben Sie versucht? um klar zu sein, wollen Sie die maximale OBS aus dem gesamten Datensatz oder nur die maximale der GROUP == 2? – rawr

+1

Für letzteres ... 'by (df, df $ GROUP, Funktion (x) x [which.max (x $ OBS),]) $ \' 2 \ "aber tu das nicht. – Frank

+0

Aus dem Beispiel ist der maximale Wert in OBS 10 für GROUP 2. Und das entsprechende Element in ID ist F. Ich möchte das entsprechende Element basierend auf GROUP und der maximalen OBS finden. –

Antwort

2

Unter der Annahme, dass Sie meinen, dass Sie zunächst den Datenrahmen durch die Bedingung wollen Subset dass GROUP gleich 2 sein sollte, und dann die ID identifizieren, für die der Wert von OBS höchsten ist, sollte dies den Trick:

df2 <- df[df$GROUP==2,] 
df2$ID[df2$OBS==max(df2$OBS)] 
+2

Vielleicht erwähnenswert einfachere Syntax mit Paketen: 'library (data.table); setDT (df) [GROUP == 2] [OBS == max (OBS)] 'oder' library (dplyr); df%>% filter (GROUP == 2)%>% filter (OBS == max (OBS)) ' – Frank

+0

Ist es möglich, wenn es mit einem Zeilencode gemacht werden kann? –

+1

'mit (df, ID [which.max (OBS * GROUP% in% 2)])' Ich habe es auch in 0 Zeilen gemacht, aber ich sage dir nicht wie – rawr

Verwandte Themen