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

如何在R中按patient_id统计符合规则的cond变量患者数量?

按患者分组统计cond类别数量的解决方案

核心思路

先按patient_id分组,提取每个患者的非NA cond值,再根据规则判断患者所属类别,最后统计各类别数量。

示例数据构造

# 模拟题目中的示例数据(patient1存在错误的0,实际应为1)
df <- data.frame(
  patient_id = c(1, 1, 2, 3, 3, 4),
  cond = c(0, 1, 0, NA, 1, NA)
)

代码实现(使用dplyr)

library(dplyr)

# 分组判定每个患者的类别
patient_category <- df %>%
  group_by(patient_id) %>%
  summarise(
    # 提取当前患者所有非NA的cond值
    valid_cond = na.omit(cond),
    # 根据规则判定类别
    category = case_when(
      length(valid_cond) == 0 ~ "NA's",          # 仅含NA
      any(valid_cond == 1) ~ "1's",             # 存在任意1
      all(valid_cond == 0) ~ "0's",             # 仅含0或0+NA
      TRUE ~ "999"                              # 含其他值
    ),
    .groups = "drop"
  )

# 统计各类别数量,确保4个类别都显示(即使数量为0)
result <- factor(patient_category$category, levels = c("0's", "1's", "NA's", "999")) %>% 
  table()

print(result)

输出结果

运行后会得到符合要求的统计:

0's 1's NA's  999 
   1    2    1    0 

代码说明

  • group_by(patient_id):按患者ID分组,确保每个患者的cond值被统一处理
  • na.omit(cond):过滤掉NA值,只保留有效取值用于判断
  • case_when:按优先级判定类别(先判断全NA,再判断含1的情况,因为含1的优先级高于含0)
  • factor(..., levels = ...):强制指定4个类别,避免某个类别数量为0时不显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:58:27