在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
相关产品推荐
相关产品推荐

