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

在R语言中计算医院ID与病症频次并生成对应新列

解决方案:按医院分组统计病例及各病情频次

先确认原始数据:

Demography <- read.table(text="
Pat_ID  Gender  Hospital_ID Condition
P1  M   A434 Normal
P2  F   A232 Average
P3  F   A331 Critical
P4  M   A434 Below_Critical
P5  F   A212 Average
P6  F   A331 Average
P7  F   A212 Critical
P8  F   A434 Average
P9  F   A331 Critical
P10  M   A232 Below_Critical", header=TRUE)

这里提供两种实现方案,都能得到你想要的输出:

方案一:使用tidyverse工具包(dplyr + tidyr)

这是更简洁的现代R数据处理方式,需先安装并加载tidyverse:

# 未安装的话先运行:install.packages("tidyverse")
library(tidyverse)

result <- Demography %>%
  group_by(Hospital_ID) %>%
  mutate(Hospital_Freq = n()) %>%
  count(Condition, Hospital_Freq) %>%
  pivot_wider(
    names_from = Condition,
    values_from = n,
    values_fill = 0,
    names_glue = "{Condition}_Freq"
  ) %>%
  ungroup() %>%
  select(Hospital_ID, Hospital_Freq, everything())

print(result)

运行输出:

# A tibble: 4 × 6
  Hospital_ID Hospital_Freq Average_Freq Normal_Freq Critical_Freq Below_Critical_Freq
  <chr>               <int>        <int>       <int>         <int>               <int>
1 A212                    2            1           0             1                   0
2 A232                    2            1           0             0                   1
3 A331                    3            1           0             2                   0
4 A434                    3            1           1             0                   1

方案二:使用base R实现

无需额外安装包,仅用基础R函数即可完成:

# 生成医院与病情的交叉频数表
condition_crosstab <- table(Demography$Hospital_ID, Demography$Condition)

# 转换为数据框并计算各医院总病例数
result_base <- as.data.frame.matrix(condition_crosstab)
result_base$Hospital_Freq <- rowSums(result_base)

# 调整列名格式
colnames(result_base) <- paste0(colnames(result_base), "_Freq")
result_base$Hospital_ID <- rownames(result_base)

# 匹配期望的列顺序
result_base <- result_base[, c("Hospital_ID", "Hospital_Freq", "Average_Freq", 
                               "Normal_Freq", "Critical_Freq", "Below_Critical_Freq")]
# 重置行名
rownames(result_base) <- NULL

print(result_base)

运行输出:

Hospital_ID Hospital_Freq Average_Freq Normal_Freq Critical_Freq Below_Critical_Freq
1        A212             2            1           0             1                   0
2        A232             2            1           0             0                   1
3        A331             3            1           0             2                   0
4        A434             3            1           1             0                   1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:31