2017-09-30 3 views
1

Ich bin ein Rookie-STATA-Benutzer, der versucht, den Sprung zu R zu machen. Ich arbeite durch verschiedene Übungen, behalte aber immer etwas falsch mit dem Befehl group_by und subset.Gruppenberechnungen mit group_by und Subset-Befehlen

Ich habe einen einfachen Datensatz, auf dem ich gruppenbasierte Berechnungen vornehmen möchte. Ich versuche, den Befehl groups_by ​​aus dem dplyr-Paket zu verwenden, um dies zu tun.

My Datensatz wird juckende genannt und besteht aus 4 variabels:
Behand- Ebene A und B (Art der Behandlung)
Typ- Ebene Dunkel und Fair (Hautfarbe)
y - Ebene 0 und 1 (Versagen oder Erfolg der Behandlung)
Freq - numerische Variable, die angibt, wie in dieser speziellen Gruppe sind viele

diesen Code können Sie es neu erstellen:

type <- c(2,2,2,2,1,1,1,1) 
treat <-c(1,1,2,2,1,1,2,2) 
y <- c(1,0,1,0,1,0,1,0) 
freq <- c(9,17,5,20,10,15,3,20) 
itchy <- cbind.data.frame(type,treat,y,freq) 
itchy$type <- as.factor(type) 
itchy$type <- factor(itchy$type,levels = c(1,2), labels = c("Dark", "Fair")) 
itchy$treat <- as.factor(treat) 
itchy$treat <- factor(itchy$treat,levels = c(1,2), labels = c("A", "B")) 
itchy$y <- as.factor(y) 
itchy$y <- factor(itchy$y,levels = c(0,1), labels = c("failure", "succes")) 

Nun möchte ich die ODs für einen Erfolg für die Behandlungen A und B berechnen, wenn sie auf den Hauttyp Dark oder Fair aufgetragen werden. (Ods = nr erfolgreiche Veranstaltungs/nr Ausfälle)

Ich habe zwei Fragen:

1) Können Sie mir helfen, durch Gruppen, die die ods Berechnungen zu tun?
2) Ich habe versucht mit verschiedenen Kombinationen von group_by und subset, ohne Glück. Der folgende Code zeigt einige meiner erfolglosen Versuche. Können Sie dann sagen, dass ich, wie die group_by und Teilmenge Befehle funktionieren

itchy %>% group_by(treat, type) %>% summarize(ods = (subset(freq, y==1)/subset(freq, y==0))) 

itchy %>% group_by(treat, type) %>% ods <- c((subset(freq, y==1)/subset(freq, y==0))) 

itchy %>% group_by(treat, type) %>% itchy$ods <- (subset(freq, y==1)/subset(freq, y==0)) 

Antwort

1

Wenn ich Sie richtig verstehe, denke ich, dass das Folgende funktioniert. Ich nutzte die Verbreitung Funktion aus dem tidyr Paket, das wie dplyr Teil der tidyverse


library(tidyr) 
itchy %>% 
    spread(y, freq) %>% 
    mutate(odds = succes/failure) 

    type treat failure succes  odds 
1 Dark  A  15  10 0.6666667 
2 Dark  B  20  3 0.1500000 
3 Fair  A  17  9 0.5294118 
4 Fair  B  20  5 0.2500000 
+0

Das hat wie ein Zauber funktioniert. Nur um sicherzustellen, dass ich den Code verstehe: "Spread" ändert die y-Variable von Long- zu Wide-Format. "muate" erzeugt eine neue Variable –

+0

Das ist richtig. Ich hätte die Argumentnamen für Klarheit verwenden sollen. Sie finden die Dokumente online unter http://tidyr.tidyverse.org –

1
junk = itchy %>% group_by(y,treat, type) %>% summarize(Overall = sum(freq)) 
myfunc = function(arg1,arg2){ 
    filter(junk,treat == arg1,type == arg2)[1,4]/filter(junk,treat == arg1,type == arg2)[2,4] 
} 

myfunc("A","Dark") # You can try all the various combinations here 

eine grundlegende Missverständnis Hat Sie diese geben das gewünschte Ergebnis?

+0

Nein ist, tut mir leid, wenn meine Frage ist nicht klar genug: Ich mag berechnen : Das Verhältnis zwischen erfolgreichen und unsuccefull Behandlungen (ods = (Teilmenge (Freq, y == 1)/Teilmenge (Freq, y == 0))) Und ich möchte dies für die 4 Gruppen berechnen; Treat A + Typ Fair Treat A + Typ Dunkel Treat B + Typ Fair Treat B + Typ Dunkel –

+0

@SteenHarsted Ich habe einige Änderungen an dem Code vorgenommen. Können Sie das jetzt überprüfen? – kasa