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

如何使用R从含hosp、pid、treatment列的数据集生成0-1矩阵

没问题!我来教你怎么用R实现这个0-1矩阵的生成,先从构造示例数据集开始,再给你两种实用的实现方法:

第一步:构造示例数据集

先模拟一个符合你需求的数据集,方便后续演示:

df <- data.frame(
  hosp = c("A", "A", "B", "B", "C", "C", "A", "B", "C"),
  pid = c(1,2,3,4,5,6,7,8,9),
  treatment = c(1,0,1,1,0,1,0,0,1)
)

方法1:tidyverse风格(tidyr + dplyr)

这种方法代码更简洁易读,适合熟悉tidyverse工具链的用户:

library(tidyr)
library(dplyr)

# 生成目标矩阵
result_matrix <- df %>%
  # 将hosp的每个唯一值转为列,对应值取treatment,缺失值填0
  pivot_wider(names_from = hosp, values_from = treatment, values_fill = 0) %>%
  # 移除pid列(矩阵不需要患者ID)
  select(-pid) %>%
  # 转换为矩阵格式
  as.matrix()

# 查看结果
print(result_matrix)

运行后你会得到一个9行3列的矩阵,每个位置的0/1完全对应该观测在对应医院的treatment值。

方法2:基础R实现

如果你不想加载额外包,用基础R也能轻松实现:

# 获取所有唯一的医院名称
unique_hosps <- unique(df$hosp)

# 遍历每个医院,生成对应列的0-1值
result_matrix_base <- sapply(unique_hosps, function(hospital) {
  # 当观测的hosp等于当前医院时取treatment,否则填0
  ifelse(df$hosp == hospital, df$treatment, 0)
})

# 给矩阵列命名(对应医院名称)
colnames(result_matrix_base) <- unique_hosps

# 查看结果
print(result_matrix_base)

两种方法得到的结果完全一致,你可以根据自己的习惯选择使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:26:43