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

计算各分组中含特定记录的session占总session的比例(R语言)

问题:计算用户含特定操作的会话占比

需求:统计每个用户下至少包含1条action=='p'的会话数量,再计算该数量与用户总会话数(即该用户的max(session))的比值,同时已通过代码添加辅助列session_with_p标记对应会话是否包含'p'操作。

原始数据集

df<-read.table(text="
user     session   action
1        1          'v'
1        1          'v'      
1        1          'v'
1        2          'd'
1        2          'p'
1        2          'p'
1        3          'p'
2        1          'v'
2        1          'p'
2        2          'v'",header=T,stringsAsFactors = F)

已完成的代码步骤

df <- df %>% 
  group_by(user, session) %>% 
  mutate(session_with_p = any(action == "p"))

期望结果

需要得到包含ratio_session_posting列的数据集,示例如下:

usersessionactionsession_with_pratio_session_posting
11'v'F2/3
11'v'F2/3 (0.67)
11'v'F2/3
12'd'T2/3
12'p'T2/3
12'p'T2/3
13'p'T2/3
21'v'T1/2
21'p'T1/2
22'v'F1/2

解决方案代码

library(dplyr)

df_result <- df %>%
  # 保留原有的会话标记步骤
  group_by(user, session) %>%
  mutate(session_with_p = any(action == "p")) %>%
  # 按用户分组计算占比
  group_by(user) %>%
  mutate(
    # 计算用户总会话数
    total_sessions = max(session),
    # 统计含p操作的会话数量(去重计数)
    sessions_with_p = n_distinct(session[session_with_p]),
    # 生成分数形式的占比
    ratio_session_posting = paste0(sessions_with_p, "/", total_sessions),
    # 可选:在每组第一行添加小数格式(匹配示例中的显示)
    ratio_session_posting = if_else(row_number() == 1, 
                                    paste0(ratio_session_posting, " (", round(sessions_with_p/total_sessions, 2), ")"), 
                                    ratio_session_posting)
  ) %>%
  # 取消分组,移除中间辅助列
  ungroup() %>%
  select(-total_sessions, -sessions_with_p)

# 查看结果
print(df_result)

代码说明

  1. 先按user和session分组,用any(action == "p")标记该会话是否包含'p'操作,生成session_with_p列;
  2. 切换到按user分组,计算两个核心指标:
    • total_sessions:用户的总会话数,用max(session)获取;
    • sessions_with_p:筛选出标记为TRUE的会话,通过n_distinct去重计数得到含'p'的会话数量;
  3. 生成ratio_session_posting列,默认显示为分数格式,同时可选在每组的第一行添加括号包裹的小数近似值(如示例中的2/3 (0.67));
  4. 最后取消分组并移除中间辅助列,得到符合需求的结果集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:01:13