2016-11-18 3 views
-1

Ich habe eine data.frame mit verschachtelten Gruppen (produziert mit summarize in dyplr). Jeder Fall enthält 2 Gruppen. Für jede der beiden Gruppen habe ich einen Maximalwert einer anderen Variablen und ein Minimum. Also für jeden Fall habe ich 2 Max und 2 Min Werte. Was ich versuche, ist eine neue Indikatorvariable zu erstellen, die unter bestimmten Bedingungen in Gruppen codiert ist. Hier einige Code, der Beispieldaten erzeugt, die wie meine aussehen:Vergleichen von max und min über Gruppen in R

data <- expand.grid(groupID=1:2, caseID=1:3) 
data$max <- rnorm(nrow(data)) 
data$min <- rnorm(nrow(data)) 

So sehen die Grunddaten wie folgt aus:

> data 
    groupID caseID   max   min 
1  1  1 -0.17317875 -0.65772183 
2  2  1 -0.32221584 1.39254577 
3  1  2 0.33535437 -1.55013998 
4  2  2 -0.03950875 1.24181830 
5  1  3 1.00759879 -1.29394582 
6  2  3 0.28469228 -0.03454565 

Was ich will, ist ein Indikator, einzigartig für jede caseID, die erzeugt wird, durch Vergleichen von Werten über die Gruppen-ID. Sprich, wenn die der max der Gruppe 1 ist größer als die min der Gruppe 2:

groupID caseID   max   min newVar 
1  1  1 -0.17317875 -0.65772183  0 
2  2  1 -0.32221584 1.39254577  0 
3  1  2 0.33535437 -1.55013998  0 
4  2  2 -0.03950875 1.24181830  0 
5  1  3 1.00759879 -1.29394582  1 
6  2  3 0.28469228 -0.03454565  1 
+0

Ihre Zufallsdaten nicht haben max> min, allgemein. – Frank

Antwort

1

Sie können Ihre Spalten als Vektoren innerhalb von Gruppen wie diese Untergruppe:

library(dplyr) 

data %>% 
    group_by(caseID) %>% 
    mutate(newVar = max[groupID == 1] > min[groupID == 2]) 
+0

Das hat es getan. Ich wusste, dass es eine ziemlich einfache Antwort war und ich war in diesem frustrierenden Raum, 90% des Weges dorthin zu gehen. Vielen Dank!! –