如何用dplyR将生存分析宽表转长表:将死亡蝇数量转为二进制状态行
解决方法
你可以结合dplyr和tidyr的uncount()函数实现这个宽转长的需求,具体步骤如下:
- 加载包含
dplyr和tidyr的tidyverse包 - 用
uncount()根据Dead(n)的数值重复对应行数 - 生成全局递增的
Sample序号,同时设置固定的死亡状态Status=1 - 调整列顺序为你需要的结构
完整代码示例
library(tidyverse) # 模拟你的原始数据 original_df <- tibble( Day = c(1, 2), Sex = c("Male", "Male"), `Dead(n)` = c(1, 2) ) # 执行转换 long_df <- original_df %>% uncount(`Dead(n)`) %>% mutate( Status = 1, Sample = row_number() ) %>% select(Day, Sample, Sex, Status) # 查看转换结果 print(long_df)
运行后得到的结果完全匹配你的需求:
| Day | Sample | Sex | Status |
|---|---|---|---|
| 1 | 1 | Male | 1 |
| 2 | 2 | Male | 1 |
| 2 | 3 | Male | 1 |
关键说明
uncount(col)是核心函数,它会将每行重复col列指定的次数,刚好满足把死亡数量拆分为单独样本行的需求- 如果需要按
Day分组生成样本序号(比如每天从1开始计数),可以把row_number()改成row_number(), .by = Day(需要dplyr 1.1.0及以上版本支持.by参数)
内容的提问来源于stack exchange,提问作者Dan Pritchard
相关产品推荐
相关产品推荐

