在dplyr链中包含for循环

时间:2017-02-09 12:56:12

标签: r dplyr

我正在清理有关客户行为的一些数据,我想识别并过滤掉客户执行特定事件的第二时间。由于这是更大的数据操作项目的一个元素,理想情况下我想将这三行添加到更长的dplyr链中。

这里涉及两个逻辑:

  1. 识别第二个事件的第一行:前一行有 end_pct值大于0.9,当前行有一个end_pct 值小于0.2,前一行和当前行都有 same customer_id
  2. 识别后续行:如果是前一行 对于second_event以及前一行和当前行,行有“是” 拥有相同的customer_id
  3. 过滤掉第二次活动
  4. 这是我用于每个操作的dplyr代码:

    mutate(second_time = ifelse(lag(pct_completed,1) > 0.9 & pct_completed < .2 & lag(customer_id,1) == customer_id, "yes", "no")) %>%
    mutate(second_time = ifelse(lag(second_time,1)=="yes"&lag(customer_id,1) == customer_id, "yes", second_time)) %>%
    filter(second_time = "no")
    

    如果我在正常的dplyr链中运行上面的第二个mutate函数,它只会将第二个事件中的第二行标记为“yes”,而不是任何后续的。因此,我认为我需要编写一个for循环来捕获第二阶段中的所有剩余事件。

    我附上了一些sample data here来说明问题。

    如果有人对如何编写可以合并到dplyr链中的for循环有任何好的建议,我将非常感激。

1 个答案:

答案 0 :(得分:2)

我提出了一个更简单的解决方案。

  • 我们按客户分组(因为所有内容都是在客户中计算的)。
  • 我们检测到事件的变化,类似于您当前的逻辑并设置了一个标志。
  • 我们会累积一些标记来计算我们所处的事件。
  • 我们会在累积金额为2时进行过滤。

alias R=/usr/bin/R