You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于R语言计算用户入职后13周内的登录事件次数

统计用户入职13周内的登录事件次数

你之前报错的核心原因是误用了sum处理POSIXct类型数据——我们需要的是计数符合时间范围的登录事件行数,而非对时间值求和。以下是两种简洁的dplyr实现方案:

前置准备

确保已加载必要的包:

library(dplyr)
library(lubridate) # 用于便捷处理日期时间,可选(不用的话可替换`days(91)`为整数91)

方案1:先过滤再分组计数

先筛选出每个用户入职后91天内的登录记录,再按用户分组统计次数:

login_counts <- log_df %>%
  # 将入职日期转换为POSIXct,与raised_at类型统一,同时计算91天后的截止时间
  mutate(
    onboarding_posix = as.POSIXct(onboarding_date),
    period_end = onboarding_posix + days(91)
  ) %>%
  # 过滤登录时间在入职日到截止日之间的记录
  filter(raised_at >= onboarding_posix, raised_at <= period_end) %>%
  # 按用户分组,统计登录次数
  group_by(case_number) %>%
  summarize(login_count = n())

方案2:分组后直接条件计数

无需提前过滤,直接在分组统计阶段判断每条记录是否符合时间范围:

login_counts <- log_df %>%
  group_by(case_number, onboarding_date) %>%
  summarize(
    login_count = sum(
      # 逻辑条件:登录时间在入职日及之后,且入职91天内
      raised_at >= as.POSIXct(onboarding_date) & 
      raised_at <= as.POSIXct(onboarding_date + days(91)),
      na.rm = TRUE # 处理可能的NA值
    ),
    .groups = "drop" # 取消分组状态
  )

补充:保留所有用户(含无登录记录的用户)

如果需要统计所有用户(包括入职后无登录的用户,计数为0),可结合right_join补全:

# 假设存在包含所有用户的user_df(至少有case_number和onboarding_date列)
login_counts_all <- log_df %>%
  group_by(case_number, onboarding_date) %>%
  summarize(
    login_count = sum(
      raised_at >= as.POSIXct(onboarding_date) & 
      raised_at <= as.POSIXct(onboarding_date + days(91)),
      na.rm = TRUE
    ),
    .groups = "drop"
  ) %>%
  right_join(user_df %>% select(case_number, onboarding_date), 
             by = c("case_number", "onboarding_date")) %>%
  mutate(login_count = replace_na(login_count, 0))

内容的提问来源于stack exchange,提问作者RebeccA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:52:36