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

R中频率统计与组合分析结果不一致的修正代码咨询

问题描述

使用R语言生成包含PTSD、ANX、DEP变量的数据集后,通过table()函数得到各变量High(值为2)的计数:PTSD=167、ANX=156、DEP=156。但原组合分析代码输出的单一变量High计数与该结果不符,经Excel的COUNTIFS函数验证,正确的组合计数应为:

  • PTSD: 167
  • ANX: 156
  • DEP: 156
  • PTSD+ANX: 56
  • PTSD+DEP: 52
  • ANX+DEP: 51
  • PTSD+ANX+DEP: 23
原代码问题分析

原组合分析代码通过长格式转换、筛选High值后按ID汇总变量组合,统计的是**仅该组合变量为High,其余变量为非High(Low或NA)的人数,而非用户需要的该组合变量均为High,其余变量任意(包括High/NA/Low)**的人数,因此结果与预期不符。

修正后的组合分析代码

方法一:手动定义组合(适合变量较少的场景)

library(dplyr)

# 定义需要统计的所有组合及对应筛选条件
combinations <- list(
  "PTSD" = ~PTSD == 2,
  "ANX" = ~ANX == 2,
  "DEP" = ~DEP == 2,
  "PTSD+ANX" = ~PTSD == 2 & ANX == 2,
  "PTSD+DEP" = ~PTSD == 2 & DEP == 2,
  "ANX+DEP" = ~ANX == 2 & DEP == 2,
  "PTSD+ANX+DEP" = ~PTSD == 2 & ANX == 2 & DEP == 2
)

# 遍历组合计算计数
result <- purrr::imap_dfr(combinations, function(filter_rule, combo_name) {
  df %>%
    filter(!!filter_rule) %>%
    summarise(combination = combo_name, n = n())
})

print(result)

方法二:动态生成组合(适合变量较多的场景)

library(dplyr)
library(purrr)
library(tidyr)

# 指定目标变量
target_vars <- c("PTSD", "ANX", "DEP")

# 生成所有非空变量子集
all_subsets <- map(seq_along(target_vars), function(k) {
  combn(target_vars, k, simplify = FALSE)
}) %>% flatten()

# 转换子集为组合名称和筛选表达式
subset_details <- map_dfr(all_subsets, function(subset) {
  combo_name <- paste(subset, collapse = "+")
  # 构建多变量同时为High的筛选规则
  filter_expr <- map(subset, ~sym(.x) == 2) %>% reduce(`&`)
  tibble(combination = combo_name, filter = list(filter_expr))
})

# 计算每个组合的符合条件的行数
result <- subset_details %>%
  rowwise() %>%
  mutate(n = nrow(filter(df, !!filter))) %>%
  ungroup() %>%
  select(combination, n)

print(result)
验证结果

运行修正后的代码,输出将与Excel验证结果完全一致:

# A tibble: 7 × 2
  combination        n
  <chr>          <int>
1 PTSD             167
2 ANX              156
3 DEP              156
4 PTSD+ANX          56
5 PTSD+DEP          52
6 ANX+DEP          51
7 PTSD+ANX+DEP      23

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:34:53