2017-07-02 32 views
0

我正在嘗試爲某些變量(adstock定義爲先前觀察的值+先前觀察的值* adstock rate)創建adstock效果。我有一個表格abc,它有兩列:GEOG(A,B,C)和GRP(1到6),共18個觀測值。我想創建一個變量b,通過獲取第一個GEOG的第一個obs,並通過.5進行adstocking。然後,當我到達第二個GEOG的第一個對象時,重新初始化它= GRP並再次執行。我創建了一個僅適用於一個地理區域的代碼。但我不知道如何通過地理來做到這一點。來自不同的統計語言,我仍然在圍繞着R的工作方式而努力。誰能幫忙?提前致謝。下面是一個GOEG工作代碼:R - 按組的廣告

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) 

} 

輸出:

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

請提供可重現的數據示例和期望的結果。 https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

回答

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) 

http://r4ds.had.co.nz/many-models.html瞭解詳情。

+0

感謝您的答覆。不幸的是我不斷收到錯誤信息:function_list [[i]](value)中的錯誤:找不到函數「group_by」 – cesco

+0

加載tidyverse軟件包。 –

+0

它工作。非常感謝你 – cesco