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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:37:27