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

如何用R语言基于多疾病列与多特征列生成列联表?

多疾病列生成列联表的R实现方案

针对你有多个疾病列(disease1、disease2)的场景,可以通过调整tidyr和dplyr的操作逻辑,生成和单疾病场景格式一致的列联表,具体代码和步骤如下:

完整代码

library(dplyr)
library(tidyr)

# 你的数据集
disease1 <- c("high", "low", "high", "high", "low","low","low","low");
disease2 <- c("high", "high", "high", "high", "low","low","low","low");
ToA <- c("P","A","P","P","A","A","A","P");
ToB <- c("P","A","A","P","A","P","A","P");
ToC <- c("P","P","A","P","A","A","A","P"); 
df <- data.frame(disease1, disease2, ToA, ToB, ToC)

# 生成多疾病列联表
result <- df %>%
  # 将所有疾病列转成长格式,区分不同疾病类型
  pivot_longer(starts_with("disease"), names_to = "disease_type", values_to = "disease_val") %>%
  # 将所有检测列(ToA/ToB/ToC)转成长格式
  pivot_longer(starts_with("To"), names_to = "test_item", values_to = "test_val") %>%
  # 统计每个组合的频数
  count(disease_type, test_item, disease_val, test_val) %>%
  # 转成宽格式,保持和单疾病场景一致的命名规则
  pivot_wider(
    names_from = c(disease_val, test_val),
    values_from = n,
    names_sep = "_",
    values_fill = 0  # 可选:填充缺失的频数为0,让结果更规整
  )

print(result)

代码逻辑说明

  • 第一步:用starts_with("disease")匹配所有疾病列,转成长格式后新增disease_type标记疾病列名称、disease_val存储high/low取值。
  • 第二步:用starts_with("To")匹配所有检测列,转成长格式后新增test_item标记检测项名称、test_val存储P/A取值。
  • 第三步:通过count()统计每个疾病类型-检测项-疾病取值-检测取值组合的出现次数。
  • 第四步:转成宽格式,将disease_val和test_val拼接为列名(用_分隔),频数作为对应列的值。

输出示例

运行后会得到类似如下的结果,每一行对应一个检测项,列则包含不同疾病的high/low与检测P/A组合的频数:

# A tibble: 6 × 5
  disease_type test_item high_P high_A low_P low_A
  <chr>        <chr>      <int>  <int> <int> <int>
1 disease1     ToA            3      1     1     3
2 disease1     ToB            2      2     2     2
3 disease1     ToC            3      1     1     3
4 disease2     ToA            3      1     1     3
5 disease2     ToB            3      1     1     3
6 disease2     ToC            3      1     1     3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:20:34