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

按日期与名称统计A/B分类关联情况及B类总数的技术实现

统计关联A的B分类占比及相关指标的R实现

需求说明

需要完成以下统计任务:

  • 统计同一日期、同一名称下同时存在A和B分类的记录数(即该名称当日既有A又有B的B条目数量)
  • 统计每日的B分类总记录数
  • 基于上述两个指标计算:
    • 关联A的B分类占比 = 当日关联A的B记录数 / 当日B总记录数
    • 未关联A的B分类占比 = 1 - 关联A的B分类占比

示例数据集

Date <- c("2022-01-01","2022-01-01","2022-01-01","2022-01-02","2022-01-02","2022-01-02", "2022-01-02")
Name <- c("John Doe","John Doe","Peter Parker","Bruce Wayne","Bruce Wayne","Lebron James", "Jane Doe")
Classification <- c("A","B","B", "B", "A", "B", "B")

df <- data.frame(Date, Name, Classification)
df

期望输出

(注:修正了原代码中变量名错误,将daily_total_output改为daily_total_b_output)

date_output <- c("2022-01-01", "2022-01-02")
b_and_a_output <- c(1, 2)
daily_total_b_output <- c(1, 3)
desired_output <- data.frame(date_output, b_and_a_output, daily_total_b_output)
desired_output

解决方案(使用dplyr)

library(dplyr)

result <- df %>%
  # 按日期+名称分组,标记该组是否同时包含A和B分类
  group_by(Date, Name) %>%
  mutate(has_both = all(c("A", "B") %in% Classification)) %>%
  ungroup() %>%
  # 按日期分组计算各项指标
  group_by(Date) %>%
  summarise(
    b_and_a_output = sum(Classification == "B" & has_both),
    daily_total_b_output = sum(Classification == "B"),
    `关联A的B分类占比` = b_and_a_output / daily_total_b_output,
    `未关联A的B分类占比` = 1 - `关联A的B分类占比`
  ) %>%
  ungroup()

print(result)

代码说明

  1. 分组标记:先通过group_by(Date, Name)对每个用户的每日记录分组,用all(c("A", "B") %in% Classification)判断该分组是否同时存在A和B分类,生成has_both标记。
  2. 每日统计:再按日期分组,分别统计关联A的B记录数、当日B总记录数,最后直接计算两个占比指标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:45:41