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

计算3个事件同时发生次数及扩展至多事件的R语言实现方法

计算多事件同时发生的次数(3个及以上)

给定仅包含0/1取值的事件数据集(1表示事件发生,0表示未发生):

df <- data.frame(event1 = c(1, 0, 0, 1, 0, 0, 1),
                    event2 = c(1, 1, 0, 1, 0, 0, 1),
                    event3 = c(1, 0, 0, 0, 0, 0, 0),
                    event4 = c(0, 1, 1, 0, 1, 0, 0),
                    event5 = c(0, 1, 0, 1, 0, 1, 1),
                    event6 = c(1, 0, 0, 0, 0, 0, 0))

统计3个事件同时发生的次数

通过以下步骤实现需求:

  1. 生成所有3个事件的不重复组合
  2. 对每个组合统计同一行中三个事件均为1的记录数
  3. 整理为易读的格式

代码实现

# 生成所有3个事件的组合
event_triples <- combn(names(df), 3, simplify = FALSE)

# 计算每个三元组的同时发生次数
counts <- sapply(event_triples, function(triple) {
  # 行和等于3意味着三个事件都为1
  sum(rowSums(df[triple]) == 3)
})

# 整理为数据框格式
result_df <- data.frame(
  事件组合 = sapply(event_triples, paste, collapse = ", "),
  发生次数 = counts
)

# 或者整理为矩阵格式
result_matrix <- matrix(counts, ncol = 1, 
                        dimnames = list(sapply(event_triples, paste, collapse = ", "), "发生次数"))

运行后可得到你提到的结果:比如event1, event2, event3的发生次数为1,event2, event4, event5的发生次数为1。

扩展到k个事件(k>3)

上述逻辑可直接扩展到任意k个事件的情况,只需将combn函数中的3替换为目标k值即可:

代码示例(以k=4为例)

# 设置目标事件数量
k <- 4

# 生成所有k个事件的组合
event_k_combs <- combn(names(df), k, simplify = FALSE)

# 计算每个组合的同时发生次数
k_counts <- sapply(event_k_combs, function(comb) {
  sum(rowSums(df[comb]) == k)
})

# 整理结果
k_result_df <- data.frame(
  事件组合 = sapply(event_k_combs, paste, collapse = ", "),
  发生次数 = k_counts
)

逻辑说明

  • combn(names(df), k):生成数据集中所有k个事件的不重复组合
  • rowSums(df[comb]) == k:判断某一行中该组合的所有事件是否都为1(行和等于k)
  • sum():统计满足条件的总行数,即该事件组合同时发生的次数

你之前查询的两个事件同时发生的统计,本质就是k=2的情况,完全适用这套逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:15:13