我有一个这样的数据集:
client_id | interaction_1 | interaction_2 | conversion |
---|---|---|---|
A | 1 | 0 | 0 |
B | 0 | 1 | 0 |
C | 0 | 0 | 1 |
A | 0 | 0 | 1 |
B | 0 | 1 | 0 |
B | 0 | 0 | 1 |
C | 0 | 1 | 0 |
C | 0 | 0 | 1 |
数据集已根据时间戳(升序)排序。交互和转换列都是虚列(0/1)。对于每次转换,我需要计算client_id进行交互或转换的次数,但只计算自上次转换以来的交互次数(因此,“lag_conversion”列永远不会大于1)。
输出应该如下所示:
client_id | interaction_1 | interaction_2 | conversion | lag_interaction_1 | lag_interaction_2 | lag_conversion |
---|---|---|---|---|---|---|
A | 1 | 0 | 0 | 0 | 0 | 0 |
B | 0 | 1 | 0 | 0 | 0 | 0 |
C | 0 | 0 | 1 | 0 | 0 | 0 |
A | 0 | 0 | 1 | 1 | 0 | 0 |
B | 0 | 1 | 0 | 0 | 0 | 0 |
B | 0 | 0 | 1 | 0 | 2 | 0 |
C | 0 | 1 | 0 | 0 | 0 | 0 |
C | 0 | 0 | 1 | 0 | 1 | 1 |
我试过代码:
for (i in 1:nrow(mydata)) { client_id <- mydata$client_id[i] if (mydata$conversion[i] == 1) { last_conversion_index <- max(which(mydata$client_id == client_id & mydata$conversion== 1 & 1:nrow(mydata) <= i)) mydata$interaction_1[i:last_conversion_index & mydata$interaction_1== 1] <- 1 } }
尽管这只会导致行本身中出现1,这意味着第一行看起来像:|client_id|interaction_1|interaction_2|conversion|lag_interaction_1|lag_ininteraction_2| lag_conversion ||-------|-----------|----|----||----|a|1|0|0|1|0|0|
非常感谢您的帮助!提前感谢