我有一个这样的数据集:
| 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|
非常感谢您的帮助!提前感谢