如何将用药疗程数据转换为0-1序列的纵向数据?
疗程数据转纵向0-1序列的实现方法
下面提供两种常用数据处理工具的实现方案,直接基于你的疗程规则生成目标序列:
Python 实现
基础序列生成
如果仅需要生成单个患者的0-1状态序列,可直接用列表推导式快速展开:
# 定义疗程:(持续天数, 用药状态1/0) treatment_cycles = [(150, 1), (1, 0), (60, 1), (2, 0)] # 生成每日状态序列 daily_status = [status for days, status in treatment_cycles for _ in range(days)]
daily_status 即为包含150个1、1个0、60个1、2个0的列表。
Pandas 批量处理数据集
若你的数据是多患者的结构化表格(每个疗程占一行),可通过重复行实现纵向展开:
import pandas as pd # 示例数据集 df = pd.DataFrame({ '患者ID': [1, 1, 1, 1], '天数': [150, 1, 60, 2], '状态': [1, 0, 1, 0] }) # 按疗程天数重复每行 df_expanded = df.loc[df.index.repeat(df['天数'])] # 重置索引并添加日序号(可选) df_expanded = df_expanded.reset_index(drop=True) df_expanded['日序号'] = df_expanded.groupby('患者ID').cumcount() + 1
处理后df_expanded的每行对应一位患者一天的用药状态。
R 实现
基础序列生成
利用rep()函数直接按次数重复状态值:
# 定义状态向量和对应持续天数 status_vec <- c(1, 0, 1, 0) days_vec <- c(150, 1, 60, 2) # 生成每日状态序列 daily_status <- rep(status_vec, times = days_vec)
Tidyverse 批量处理数据集
针对多患者的表格数据,用uncount()函数展开疗程:
library(tidyverse) # 示例数据集 df <- tibble( 患者ID = c(1, 1, 1, 1), 天数 = c(150, 1, 60, 2), 状态 = c(1, 0, 1, 0) ) # 按天数展开行并添加日序号(可选) df_expanded <- df %>% uncount(天数) %>% mutate(日序号 = row_number(), .by = 患者ID)
内容的提问来源于stack exchange,提问作者Abdullah Abdelaziz
相关产品推荐
相关产品推荐

