【问题标题】:Conditional lag function条件滞后函数
【发布时间】:2019-08-26 13:19:42
【问题描述】:

数据基于来自 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,但如果在Visit 1, Hit 2 的情况下不可用,则会返回<NA>

【问题讨论】:

  • 所以进行条件变异的方法是使用mutate(ifelse(condition, do this is true, do this if false))。我会写具体的代码但不完全理解条件,你能更具体吗?理想情况下,您可以写出预期的输出数据帧
  • 那么,首先:您的问题是什么?您是否尝试自己实现此功能?当您尝试实现此功能时出现了哪些问题? Stackoverflow 不是一个编码服务,而是一个帮助解决编码问题的网站。目前,您的问题(和措辞)尚不清楚您到底想要达到什么目标。重新阅读您的问题并尝试将其改写为编码问题。查看what not to ask,这将帮助您提供更好的问题。

标签: r dplyr lag


【解决方案1】:

这是你想要做的吗?

library(dplyr)

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

【讨论】:

  • 就是这样。我打算添加所需的状态示例,但你完美地得到了这个。我能问一下你为什么从以前的版本改为这个版本吗?
  • 优秀。我只是通过将两个 mutate 操作合并为一个来简化解决方案。干杯
【解决方案2】:

我们可以做一个 group_by 选项

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

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 2019-10-02
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多