转换R中“channelAttribution”包的数据格式

时间:2016-09-21 08:55:03

标签: r markov

我有以下数据格式 -

Id     Record      Date      Medium
  1    display     9/7/2016     A
  1    display     9/8/2016     B
  1    display     9/9/2016     A
  1    Interaction 9/10/2016    B

  1    display     9/11/2016    A
  1    display     9/12/2016    B
  1    display     9/13/2016    A
  1    Interaction 9/14/2016    B

  1    display     9/15/2016    C
  1    display     9/16/2016    B

  2    display     9/17/2016    A
  2    display     9/18/2016    B
  2    display     9/19/2016    A
  2    Interaction 9/20/2016    B

  2    display     9/21/2016    A
  2    display     9/22/2016    B
  2    display     9/23/2016    A
  2    display     9/24/2016    B

数据简介 - 对于特定的ID,数据显示用户从一种媒介到另一种媒介的旅程,然后可能导致网站互动。

Ex:对于id“2”,旅程是从媒体1> 2> 1> 2( - >注意旅程停止时听到有网站交互)。插入上述数据的空白行表示旅程停止的位置。因此,在这种情况下,ID“2”有两个不同的旅程。

注意:我已经使用ID和Date作为变量对数据进行了排序,因此上述情况将始终发生,我们在此不考虑日期。

我想要实现的目标 要创建一个新表,第一列中包含所有路径,第二列中的转化次数和第三列中的非转化次数。

  • 转换是指路径以“记录=互动”
  • 结束

上表的最终输出如下 -

    PATH    Count_Conversion   Count_Non-Convert
  A>B>A>B        3                      1
  C>B            0                      1

请帮助使用R。

中的代码

1 个答案:

答案 0 :(得分:1)

例如

library(tidyverse)
df <- read_table("Id     Record      Date      Medium
  1    display     9/7/2016     A
  1    display     9/8/2016     B
  1    display     9/9/2016     A
  1    Interaction 9/10/2016    B

  1    display     9/11/2016    A
  1    display     9/12/2016    B
  1    display     9/13/2016    A
  1    Interaction 9/14/2016    B

  1    display     9/15/2016    C
  1    display     9/16/2016    B

  2    display     9/17/2016    A
  2    display     9/18/2016    B
  2    display     9/19/2016    A
  2    Interaction 9/20/2016    B

  2    display     9/21/2016    A
  2    display     9/22/2016    B
  2    display     9/23/2016    A
  2    display     9/24/2016    B")
df %>% 
  mutate(Id = cumsum(is.na(Id))+1) %>% 
  filter(!is.na(Medium)) %>% 
  group_by(Id) %>% 
  summarise(
    path = paste(Medium, collapse=">"), 
    conversion = "Interaction" %in% Record
  ) %>% 
  group_by(path) %>% 
  summarise(
    cons=sum(conversion), 
    no_cons=sum(!conversion)
  )
# # A tibble: 2 x 3
#      path  cons no_cons
#     <chr> <int>   <int>
# 1 A>B>A>B     3       1
# 2     C>B     0       1