【发布时间】:2023-03-16 17:36:01
【问题描述】:
我正在清理一些关于客户行为的数据,我想识别并过滤掉客户执行某个事件的秒时间。由于这是一个更大的数据操作项目的一个元素,理想情况下我想将它作为三行添加到更长的 dplyr 链中。
这里涉及到两个逻辑:
- 识别第二个事件的第一行:前一行有 end_pct 值大于 0.9,当前行有 end_pct value 值低于 0.2,并且前一行和当前行具有 相同的 customer_id
- 识别后续行:如果前一个 行对 second_event 以及前一行和当前行具有“是” 具有相同的 customer_id
- 过滤掉第二次事件
这是我用于这些操作的 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 函数,它只会将第二个事件中的第二行标记为“是”,而不是任何后续的。因此,我认为我需要编写一个 for 循环来捕获第二阶段中所有剩余的事件。
我附上了一些sample data here 来说明问题。
如果有人对如何编写可合并到 dplyr 链中的 for 循环有任何好的建议,我将不胜感激。
【问题讨论】: