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

Tidyverse中按TRUE/FALSE变量全组合分组计算均值的实现方法

R 实现多布尔变量全组合分组求均值的方案

你可以通过遍历所有非空布尔变量组合的方式完成计算,依赖tidyverse套件即可实现,完整代码如下:

# 加载依赖
library(tidyverse)

# 你的示例数据集
set.seed(1)
data <- tibble(
  A = sample(c(TRUE, FALSE), 10, replace = T),
  B = sample(c(TRUE, FALSE), 10, replace = T),
  C = sample(c(TRUE, FALSE), 10, replace = T),
  value = sample(1:100, 10)
)

# 核心计算逻辑
## 定义参与组合的布尔变量列,可根据实际需求调整
bool_cols <- c("A", "B", "C")

## 遍历所有非空组合计算均值,输出tidy格式tibble
result <- map_dfr(seq_along(bool_cols), function(group_len) {
  # 生成长度为group_len的所有变量组合
  combn(bool_cols, group_len, simplify = FALSE) %>%
    map_dfr(function(current_group) {
      # 过滤出当前组合所有变量都为TRUE的行
      filter_data <- data %>% filter(if_all(all_of(current_group), ~.x))
      # 返回单组计算结果
      tibble(
        group = paste(current_group, collapse = ","),
        group_size = nrow(filter_data),
        value_mean = mean(filter_data$value)
      )
    })
})

运行后得到的result就是符合要求的结果,输出示例如下:

# A tibble: 7 × 3
  group group_size value_mean
  <chr>      <int>      <dbl>
1 A              5       49  
2 B              4       60  
3 C              5       65.8
4 A,B            2       54.5
5 A,C            3       67  
6 B,C            2       64  
7 A,B,C          3       67 

和你描述的示例完全匹配:A,B,C组均值为(89+79+33)/3=67,B,C组均值为(44+84)/2=64。如果需要调整参与组合的布尔变量,只需要修改bool_cols的定义即可,不需要改动核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:01