如何在R中追踪用户团队归属的年度变化?
R用户团队年度变化统计方案
先构建与你提供结构一致的示例数据集:
library(dplyr) df <- tibble( user_id = c("001", "002", "003", "001", "002", "003", "004"), team = c("A", "B", "C", "A", "C", "C", "B"), year = c(2018, 2018, 2018, 2019, 2019, 2019, 2019) )
1. 统计指定年份各团队用户数量
直接筛选目标年份后按团队分组计数:
# 2018年各团队用户数 df %>% filter(year == 2018) %>% count(team, name = "user_count")
后续年份只需修改filter(year == XXXX)中的年份值即可。
2. 统计某年份变更团队的用户数量
通过lag()函数获取用户上一年的团队归属,对比当前年团队判断是否变更:
# 2019年变更团队的用户数 df %>% arrange(user_id, year) %>% group_by(user_id) %>% mutate(prev_team = lag(team)) %>% ungroup() %>% filter(year == 2019, !is.na(prev_team), team != prev_team) %>% n_distinct(user_id)
arrange()确保用户数据按年份排序lag(team)提取用户上一年的团队- 筛选条件排除新用户(
!is.na(prev_team)),只保留团队变更的用户,最后去重计数
3. 统计某年份流失的用户数量
流失用户指上一年存在但当前年无记录的用户,通过集合差集计算:
# 2019年流失用户数 users_2018 <- df %>% filter(year == 2018) %>% pull(user_id) users_2019 <- df %>% filter(year == 2019) %>% pull(user_id) length(setdiff(users_2018, users_2019))
4. 统计某年份新增的用户数量
新增用户指当前年存在但上一年无记录的用户,同样用集合差集:
# 2019年新增用户数 length(setdiff(users_2019, users_2018))
批量处理2019-2022年的通用方案
可以封装成函数,一键生成所有年份的统计结果:
calculate_year_metrics <- function(data, target_year) { prev_year <- target_year - 1 # 1. 目标年份各团队用户数 team_counts <- data %>% filter(year == target_year) %>% count(team, name = "user_count") # 2. 变更团队用户数 switched_users <- data %>% arrange(user_id, year) %>% group_by(user_id) %>% mutate(prev_team = lag(team)) %>% ungroup() %>% filter(year == target_year, !is.na(prev_team), team != prev_team) %>% n_distinct(user_id) # 3. 流失用户数 users_prev <- data %>% filter(year == prev_year) %>% pull(user_id) users_curr <- data %>% filter(year == target_year) %>% pull(user_id) churned_users <- length(setdiff(users_prev, users_curr)) # 4. 新增用户数 new_users <- length(setdiff(users_curr, users_prev)) list( team_user_counts = team_counts, switched_users = switch_users, churned_users = churned_users, new_users = new_users ) } # 循环输出2019-2022年结果 for (year in 2019:2022) { cat("=== 年份", year, "统计结果 ===\n") metrics <- calculate_year_metrics(df, year) print(metrics$team_user_counts) cat("变更团队用户数:", metrics$switched_users, "\n") cat("流失用户数:", metrics$churned_users, "\n") cat("新增用户数:", metrics$new_users, "\n\n") }
内容的提问来源于stack exchange,提问作者AneesBaqir
相关产品推荐
相关产品推荐

