2017-07-02 4 views
0

Ich versuche, den Adstock-Effekt für eine Variable zu erstellen (adstock ist definiert als Wert der vorherigen Beobachtung + Wert der vorherigen Beobachtung * adstock rate). Ich habe eine Tabelle abc, die zwei Spalten hat: GEOG (A, B, C) und GRPs (1 bis 6) für insgesamt 18 Beobachtungen. Ich möchte eine Variable b erstellen, indem ich die ersten Obs des ersten GEOG nehme und es mit .5. Wenn ich dann zu den ersten Obs des zweiten GEOG komme, reinitialisiere es = zu GRPs und mache es erneut. Ich habe einen Code erstellt, der mit nur einer Geografie sehr gut funktioniert. Aber ich kann nicht herausfinden, wie man es durch Geographie macht. Aus einer anderen statistischen Sprache kommend, umschlinge ich immer noch den Kopf, wie R funktioniert. Kann jemand helfen? Danke im Voraus. Hier ist der Code, der für ein GOEG funktioniert:R - Adstock nach Gruppe

rate1=.5 
rate2=0 
for (i in 1:nrow(abc)) { 
    if (i ==1) 
    abc[i,3] <- abc[i,2] 
    else if (i == 2) 
    #Effect = impression + last week effect * decay rate 
    abc[i,3] <- abc[i,2] + (abc[i-1,3] * rate1) 
    else 
    #Effect = impression + last week effect * decay rate 
    abc[i,3] <- abc[i,2] + (abc[i-1,3] * rate1) + (abc[i-2,3]*rate2) 

} 

Ausgang:

GEOG a b 
A 1 1 
A 2 2.5 
A 3 4.25 
A 4 6.125 
A 5 8.0625 
A 6 10.03125 
B 1 1 
B 2 2.5 
B 3 4.25 
B 4 6.125 
B 5 8.0625 
C 1 1 
C 2 2.5 
C 3 4.25 
C 4 6.125 
C 5 8.0625 
+0

Geben Sie bitte ein reproduzierbares Datenbeispiel und das gewünschte Ergebnis an. https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-beispiel –

Antwort

0
transfo <- function(df, rate1 = 0.5, rate2 = 0) { 

    b <- df[["a"]] 

    for (i in seq_along(b)) { 
    if (i == 2) { 
     b[i] <- b[i] + rate1 * b[i-1] 
    } else if (i > 2) { 
     b[i] <- b[i] + rate1 * b[i-1] + rate2 * b[i-2] 
    } 
    } 

    df[["b"]] <- b 
    df 
} 

abc %>% 
    group_by(GEOG) %>% 
    nest() %>% 
    mutate(data = map(data, transfo)) %>% 
    unnest(data) 

Erfahren Sie mehr unter http://r4ds.had.co.nz/many-models.html.

+0

Danke für die Antwort. Leider bekomme ich immer die Fehlermeldung: Fehler in Funktionsliste [[i]] (Wert): Funktion "group_by" konnte nicht gefunden werden – cesco

+0

Laden Sie das Paket "clearyverse". –

+0

Es hat funktioniert. Vielen Dank – cesco