在R中按行统计3个及以上布尔变量的高频组合的方法
R实现多布尔变量高频组合统计方案
核心思路
对每一行取值为1的变量,生成所有长度≥3的子集,再全局汇总各子集的出现次数,取排序前3的结果即可。
完整实现代码
# 加载依赖包 library(tidyverse) # 示例数据 df <- data.frame(ID = c(1, 2, 3, 4, 5, 6, 7, 8), var1 = c(0, 0, 1, 1, 1, 0, 0, 1), var2 = c(1, 0, 0, 1, 1, 1, 1, 0), var3 = c(0, 0, 1, 1, 1, 1, 0, 0), var4 = c(1, 1, 1, 1, 1, 0, 1, 1), var5 = c(0, 0, 0, 1, 1, 0, 1, 1) ) # 提取布尔变量列(排除ID列) bool_cols <- setdiff(colnames(df), "ID") # 统计所有3变量组合的出现次数,取前3 result <- df %>% rowwise() %>% # 提取当前行取值为1的变量列表 mutate(true_vars = list(bool_cols[c_across(all_of(bool_cols)) == 1])) %>% # 过滤掉1值变量不足3个的行,无有效组合 filter(length(true_vars) >= 3) %>% # 生成所有3变量组合(需要统计更长组合见下方调整说明) mutate(combs = list(combn(true_vars, m = 3, FUN = paste, collapse = "/"))) %>% unnest(combs) %>% # 按出现次数降序排序 count(combs, name = "occur_times", sort = TRUE) %>% # 取前3高频组合 head(3)
运行结果
> print(result) # A tibble: 3 × 2 combs occur_times <chr> <int> 1 var1/var4/var5 3 2 var1/var2/var3 2 3 var1/var2/var4 2
调整说明
如果需要统计所有长度≥3的组合(包含4变量、5变量等更长组合),只需替换上述代码中生成combs的逻辑:
# 替换原来的mutate(combs = list(...)) 部分 mutate(combs = list( unlist(lapply(3:length(true_vars), function(m) { combn(true_vars, m = m, FUN = paste, collapse = "/") })) ))
适配14个变量的说明
14个布尔变量的最大3元组合数仅为choose(14,3)=364,计算量极小,该方案可以直接运行无性能压力。
内容的提问来源于stack exchange,提问作者cully_π
相关产品推荐
相关产品推荐

