条件滞后函数

时间:2019-08-26 13:19:42

标签: r dplyr lag

基于来自Kaggle here的数据集并提取到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

我正在尝试实现一个mutate lag函数,该函数将返回给定访问者给定访问的先前页面路径。

例如,新列prev_path既是visitorid又是visitid特定的,并且将Hit#滞后1,但在访问1,点击2的情况下不可用时将返回<NA>。 / p>

2 个答案:

答案 0 :(得分:2)

这是您要做什么吗?

library(dplyr)

df %>%
  group_by(VisitorId, VisitId) %>%
  mutate(prev_path = ifelse(lag(`Hit#`) == `Hit#` - 1, lag(pagePath), NA))

答案 1 :(得分:1)

我们可以执行group_by选项

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