如何统计从访视1到访视2的状态转移次数并生成转移计数数据框?
处理状态转移矩阵的R实现
针对你提供的随访数据集,这里给出生成访视1到访视2状态转移次数矩阵的具体步骤:
1. 构建并整理数据
先把原始向量组合成数据框,然后筛选出访视1和访视2的记录,将数据转为宽格式,让每个患者的两次访视状态在同一行:
# 创建原始数据框 df <- data.frame( ID = c(1,1,1,2,2,2,3,3,3), Visit = c(1,2,3,1,2,3,1,2,3), State = c(2,1,1,3,2,1,2,3,1) ) # 加载tidyr包处理数据格式 library(tidyr) # 筛选访视1、2的记录,转宽格式 trans_data <- df %>% filter(Visit %in% c(1,2)) %>% pivot_wider(names_from = Visit, values_from = State, names_prefix = "Visit")
2. 生成转移次数矩阵
用table()函数统计两次访视状态的交叉频数,再转为数据框格式,明确行列代表的含义:
# 统计转移次数 trans_table <- table(trans_data$Visit1, trans_data$Visit2) # 转换为数据框并设置清晰的行列名 trans_df <- as.data.frame.matrix(trans_table) colnames(trans_df) <- paste0("到状态", colnames(trans_df)) rownames(trans_df) <- paste0("从状态", rownames(trans_df))
最终结果
运行代码后得到的trans_df就是所需的转移次数统计数据框,结果如下:
到状态1 到状态2 到状态3 从状态2 1 0 1 从状态3 0 1 0
其中行对应访视1的状态,列对应访视2的状态,对角线位置的数值代表未发生状态转移的患者计数(此示例中没有患者在两次访视间保持状态不变,因此对角线均为0)。
内容的提问来源于stack exchange,提问作者Jenn0804
相关产品推荐
相关产品推荐

