Функция условного запаздывания

Данные основаны на наборе данных из Kaggle здесь и извлечены в R.

Используя следующую структуру:

Index   VisitorId           VisitId     Visit# Hit# pagePath
0       000722514342430295  1470093727  1      1    /home
1       000722514342430295  1470093727  1      3    /google+redesign/apparel
2       000722514342430295  1470093727  1      4    /asearch.html
3       000722514342430295  1470093727  1      5    /asearch.html
4       0014659935183303341 1470037282  1      1    /home
5       0015694432801235877 1470043732  1      1    /home
6       0015694432801235877 1470043732  1      2    /google+redesign/electronics
7       0015694432801235877 1470043732  1      3    /google+redesign/apparel/men++s/men++s+t+shirts
8       0015694432801235877 1470043732  1      4    /google+redesign/apparel/kid+s/kid+s+infant
9       0015694432801235877 1470043732  1      5    /google+redesign/apparel/kid+s/kid+s+infant/quickview

Я пытаюсь реализовать функцию задержки изменения, которая будет возвращать предыдущий путь к странице для данного посещения данного посетителя.

Например, новый столбец prev_path будет относиться как к идентификатору посетителя, так и к идентификатору посещения, и будет отставать от Hit # на 1, но будет возвращать <NA>, если он недоступен в случае посещения 1, Hit 2.


person sgoley    schedule 26.08.2019    source источник
comment
поэтому условные мутации можно выполнять с помощью mutate(ifelse(condition, do this is true, do this if false)). Я бы написал конкретный код, но не совсем понимаю условие, не могли бы вы уточнить, пожалуйста? В идеале вы можете записать ожидаемый выходной фрейм данных   -  person Amit Kohli    schedule 26.08.2019
comment
Итак, прежде всего: в чем ваш вопрос? Вы сами пробовали это реализовать? Какие проблемы возникли, когда вы пытались это реализовать? Stackoverflow - это не служба кодирования, а сайт помощи в решении проблем с кодированием. В настоящее время из вашего вопроса (и формулировки) неясно, чего именно вы пытаетесь достичь. Перечитайте свой вопрос и попробуйте перефразировать его как проблему с кодированием. Ознакомьтесь с тем, чего не следует спрашивать, это поможет вам задать лучший вопрос.   -  person Oliver    schedule 26.08.2019


Ответы (2)


Это то, что вы пытаетесь сделать?

library(dplyr)

df %>%
  group_by(VisitorId, VisitId) %>%
  mutate(prev_path = ifelse(lag(`Hit#`) == `Hit#` - 1, lag(pagePath), NA))
person Aron    schedule 26.08.2019
comment
Это было именно то. Я собирался добавить пример желаемого состояния, но у вас это отлично получилось. Могу я спросить, почему вы перешли с предыдущей версии на эту? - person sgoley; 26.08.2019
comment
Превосходно. Я просто упростил решение, объединив две операции изменения в одну. Ваше здоровье - person Aron; 26.08.2019

Мы можем сделать опцию group_by

library(dplyr)
df1 %>%
   group_by(VisitorId, VisitId) %>%
   mutate(prev_path = case_when(lag(`Hit#`) == `Hit#` -1 ~ lag(pathPath), 
            TRUE ~ NA_integer_))
person akrun    schedule 26.08.2019