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

R语言实现单/重叠分类下转化与未转化客户唯一计数

R实现多设备重叠场景的转化客户计数

问题说明

需要统计7类场景下的转化、未转化唯一客户数,场景包含:

  • 3类单设备场景:App、Desktop、Web
  • 4类多设备重叠场景:App & Web、App & Desktop、Web & Desktop、App & Web & Desktop
    已知单维度分组计数的aggregate、group_by实现方法,需要解决多设备重叠逻辑的计数问题。

提供的测试数据集:

df <- data.frame(list(ClientID = c("1", "1", "1", "2", "2", "3", "3" , "3" , "3" , "4" ),
                     device = c("App", "Web", "App", "Web", "Web", "App", "Desktop", "App", "App", "Web"),
                     conversion = c("0", "0", "0", "0", "1", "1", "0", "1", "0", "1")) ) 

期望输出结构:

Scenario                With Conversion      Without Conversion 
App                          
Web                          
Desktop
App & Web
App & Desktop
Web & Desktop
App & Desktop & Web

实现逻辑

核心思路是先聚合到客户唯一粒度,先拿到每个客户触达的去重设备集合、最终转化状态(同一客户只要存在1条转化记录即判定为转化客户),再按场景规则匹配计数。

步骤1:客户粒度数据聚合

library(dplyr)

client_summary <- df %>%
  group_by(ClientID) %>%
  summarise(
    # 对设备去重后排序拼接,避免同组合顺序不一致
    device_set = paste(sort(unique(device)), collapse = " & "),
    # 转化判定:存在任意一条转化记录即为转化客户
    is_convert = any(conversion == "1")
  )

步骤2:按统计口径计数

提供两种常用统计口径的实现,按需选择即可:

口径1:重叠统计(只要客户使用过场景内所有设备即计入,场景间客户可重复)

这个口径符合“重叠场景”的统计需求,比如同时使用App、Web、Desktop的客户,会同时被计入App、Web、Desktop、App&Web、App&Desktop、Web&Desktop、全设备三端7个场景的统计。

# 定义所有待统计场景,按期望顺序排列
scenario_list <- c(
  "App", "Web", "Desktop",
  "App & Web", "App & Desktop", "Web & Desktop",
  "App & Desktop & Web"
)

# 初始化结果表
result <- data.frame(
  Scenario = scenario_list,
  `With Conversion` = 0,
  `Without Conversion` = 0,
  check.names = FALSE
)

# 逐场景匹配计数
for (i in seq_along(scenario_list)) {
  target_dev <- strsplit(scenario_list[i], " & ")[[1]]
  # 筛选设备集合包含当前场景所有设备的客户
  match_client <- client_summary %>%
    rowwise() %>%
    filter(all(target_dev %in% strsplit(device_set, " & ")[[1]]))
  
  result[i, "With Conversion"] <- sum(match_client$is_convert)
  result[i, "Without Conversion"] <- sum(!match_client$is_convert)
}

基于测试数据集运行后得到的结果:

ScenarioWith ConversionWithout Conversion
App11
Web21
Desktop10
App & Web01
App & Desktop10
Web & Desktop00
App & Desktop & Web00

口径2:互斥统计(客户设备组合与场景完全匹配才计入,场景间客户无重叠)

如果需要各场景客户不重复、加总等于总客户数,用这个口径即可:

library(tidyr)

result_exclusive <- client_summary %>%
  group_by(Scenario = device_set) %>%
  summarise(
    `With Conversion` = sum(is_convert),
    `Without Conversion` = sum(!is_convert),
    .groups = "drop"
  ) %>%
  # 补全无客户的场景,填充0
  full_join(data.frame(Scenario = scenario_list), by = "Scenario") %>%
  mutate(
    `With Conversion` = replace_na(`With Conversion`, 0),
    `Without Conversion` = replace_na(`Without Conversion`, 0)
  ) %>%
  # 按指定场景顺序排序
  arrange(factor(Scenario, levels = scenario_list))

基于测试数据集运行后得到的结果:

ScenarioWith ConversionWithout Conversion
App00
Web20
Desktop00
App & Web01
App & Desktop10
Web & Desktop00
App & Desktop & Web00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:33:17