R - Adstock by group

时间:2017-07-02 22:53:14

标签: r

我正在尝试为某个变量创建adstock效果(adstock定义为先前观察值+先前观察值* adstock率)。我有一个表格abc,有两列:GEOG(A,B,C)和GRP(1到6)共18个观测值。我想创建一个变量b,取第一个GEOG的第一个障碍物然后说出.5。然后,当我到达第二个GEOG的第一个障碍物时,将其重新初始化为GRP并再次执行。我创建了一个仅适用于一个地理位置的代码。但我无法弄清楚如何按地理位置去做。来自不同的统计语言,我仍然围绕着R的工作方式。有人可以帮忙吗?提前致谢。以下是适用于一个GOEG的代码:

this is very important content

输出:

 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)

}

1 个答案:

答案 0 :(得分: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了解详情。