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

在R中高效计算各类事件在上午与下午的发生概率

高效计算事件时段发生概率的方法

针对你的需求,无需转宽表,用prop.table(base R)或dplyr分组计算都能高效完成,以下是具体实现:

1. 准备数据

先将你的数据转为R数据框:

library(tibble)
event_data <- tribble(
  ~Event_Time, ~Event_Name, ~Num_of_Occurances,
  "Morning", "Aggression", 3468,
  "Afternoon", "Aggression", 4658,
  "Morning", "SIB", 900,
  "Afternoon", "SIB", 1500,
  "Morning", "Elopement", 400,
  "Afternoon", "Elopement", 234,
  "Morning", "Pica", 786,
  "Afternoon", "Pica", 1234,
  "Morning", "Stereotypy", 234,
  "Afternoon", "Stereotypy", 633,
  "Morning", "Disruptive", 534,
  "Afternoon", "Disruptive", 780
)

2. 使用base R的prop.table计算

先将数据转换为列联表,再按事件分组(行)计算概率:

# 生成事件×时段的频次列联表
event_table <- xtabs(Num_of_Occurances ~ Event_Name + Event_Time, data = event_data)

# 按每个事件(行)计算时段概率,margin=1表示按行分组
prob_table <- prop.table(event_table, margin = 1)
print(prob_table)

输出结果中,每行对应一个事件,两列分别是上午、下午的发生概率,和你给出的示例结果一致(比如Aggression的Morning概率为0.4678,Afternoon为0.5322)。

3. 使用dplyr分组计算(更灵活)

如果需要保留原数据结构,用dplyr的分组+mutate可以直接生成概率列:

library(dplyr)

event_prob <- event_data %>%
  group_by(Event_Name) %>%
  mutate(Probability = Num_of_Occurances / sum(Num_of_Occurances)) %>%
  ungroup()

print(event_prob)

这个方法直接在原数据基础上添加Probability列,每个时段的概率一目了然,无需转换数据格式,方便后续分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:53:17