Преобразование формата данных для пакета channelAttribution в R

У меня есть следующий формат данных -

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

Кратко о данных. Для определенного идентификатора данные показывают путешествие пользователя с одного носителя на другой, что затем может привести к взаимодействию с веб-сайтом.

Пример: для идентификатора «2» путешествие было из Medium 1> 2> 1> 2 (-> Обратите внимание, что путешествие перестало слышать, так как было взаимодействие с веб-сайтом). Пустые строки, вставленные в приведенные выше данные, указывают, где останавливается путешествие. Таким образом, в этом случае ID "2" имеет 2 разных пути.

ПРИМЕЧАНИЕ. Я уже отсортировал данные, используя идентификатор и дату в качестве переменных, поэтому описанный выше случай всегда будет иметь место, и мы не рассматриваем здесь дату.

Что я пытаюсь сделать Создать новую таблицу со всеми путями в первом столбце, количеством конверсий во втором и количеством неконверсий в третьем.

  • Конверсия — это когда путь заканчивается на «Запись = Взаимодействие».

Окончательный вывод для приведенной выше таблицы будет следующим:

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

Помогите, пожалуйста, с кодом на R.


person Rohit Lodha    schedule 21.09.2016    source источник


Ответы (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
person lukeA    schedule 21.09.2016