R语言如何按id分组统计每个id对应的连续活动日期?
按id分组计算连续日期的实现方法
你之前的代码没有生效是因为group_by需要和mutate搭配才能让计算逻辑作用在每个分组内,而不是全局生效,以下是两种可直接运行的实现方案:
使用dplyr包实现(推荐,语法更清晰)
首先确保已经安装并加载dplyr:
# 未安装的话先运行 install.packages("dplyr") library(dplyr) df <- df %>% # 按id分组 group_by(id) %>% # 确保每个分组内的日期按升序排列,避免数据乱序导致计算错误,已排序可省略该步 arrange(activitydate, .by_group = TRUE) %>% # 组内计算连续日期标识,逻辑和你原写法一致 mutate(consecutive = c(NA, diff(activitydate) == 1)) %>% # 计算完成后解组,不影响后续其他操作 ungroup()
如果你的业务逻辑需要每个id的第一条记录的consecutive值为FALSE而非NA,只需要把mutate行内的NA改成FALSE即可。
基础包实现(无需加载额外依赖)
如果你不想安装第三方包,可以用基础包的ave函数实现分组计算:
df$consecutive <- ave(df$activitydate, df$id, FUN = function(x) c(NA, diff(x) == 1))
以上两种方案运行后,都会在你的数据集中生成符合要求的分组连续日期标识。
内容的提问来源于stack exchange,提问作者hande dede
相关产品推荐
相关产品推荐

