r - 自上次活动以来经过的代码天数
问题描述
我想对自用户上次活动以来经过的天数进行编码以进行流失分析。
我尝试了在相关主题中找到的代码,但它不起作用:
da = da %>%
arrange(dayid) %>%
group_by(dayid) %>%
mutate(dayssincelastactivity = c(NA, diff(dayid))
可以说这是数据。active 指示用户在这一天是否处于活动状态。我想添加变量 dayssincelastactivity,它表示自用户最后一个活动日以来经过的天数。
da <- data.frame(dayid = c(1,2,3,4,5,6,7,8), active = c(1,1,0,0,0,1,1,1), dayssincelastactivity = c(1,1,2,3,4,1,1,1))
da
dayid active dayssincelastactivity
1 1 1 1
2 2 1 1
3 3 0 2
4 4 0 3
5 5 0 4
6 6 1 1
7 7 1 1
8 8 1 1
解决方案
cumsum
使用和seq_along
每个组创建一个分组变量。
with(da, ave(dayid, cumsum(active == 1), FUN = seq_along))
#[1] 1 1 2 3 4 1 1 1
你也可以把它翻译成dplyr
library(dplyr)
da %>%
group_by(group = cumsum(active == 1)) %>%
mutate(new_val = row_number()) %>%
ungroup() %>%
select(-group)
# dayid active dayssincelastactivity new_val
# <dbl> <dbl> <dbl> <int>
#1 1 1 1 1
#2 2 1 1 1
#3 3 0 2 2
#4 4 0 3 3
#5 5 0 4 4
#6 6 1 1 1
#7 7 1 1 1
#8 8 1 1 1
推荐阅读
- python - 在 python 中,'for' 函数是交互的 x 因子和 y 因子吗?
- php - 如何处理 index.php 中 Request::capture() 中抛出的错误?
- swift - 使用 vDSP 时出现错误访问异常
- python-3.9 - 有没有办法可以打印带有感叹号和引号的语句?
- mysql - 如何在连接查询rails mysql中包含索引列以提高性能
- javascript - 使用 Cheerio 中的 each 函数时如何获取 HTML 格式的数据
- cluster-analysis - k-means 聚类或 K-medoids 中的 Dim 是什么?
- c# - 如何初始化树节点以进行调试?
- shopify - 客户响应 JSON 中 Shopify CustomerID 的最大长度是多少
- mongodb - mongodb currentop 输出“secs_running”、“microsecs_running”值不匹配