我有一个要根据治疗后天数而不是其治疗和随访的实际日期来比较的受试者的数据集。
我的想法是,如果所有主题都在同一点开始并在同一点结束,而不是由于主题开始时间不同而分散在多个年份,那么将更容易可视化。
在R中有办法吗?我看过vistime,它看起来很有希望,只是开始/结束应该是日期。
这是我的数据的示例:
df <- data.frame(Patient = c(1,1,1,2,2,2,3,3,3),
Response = c("PR", "CR", "CR", "SD", "SD", "PD", "PR", "PR", "CR"),
Start = rep(c("Day 30", "Day 90", "Day 180")),
End = rep(c("Day 90", "Day 180", "Day 270")))
因此,从您发布的示例中,数据实际上不是数字或日期,而是文本。
df <- data.frame(Patient = c(1,1,1,2,2,2,3,3,3),
Response = c("PR", "CR", "CR", "SD", "SD", "PD", "PR", "PR", "CR"),
Start = rep(c("Day 30", "Day 90", "Day 180")),
End = rep(c("Day 90", "Day 180", "Day 270")))
Patient Response Start End
1 1 PR Day 30 Day 90
2 1 CR Day 90 Day 180
3 1 CR Day 180 Day 270
4 2 SD Day 30 Day 90
5 2 SD Day 90 Day 180
6 2 PD Day 180 Day 270
7 3 PR Day 30 Day 90
8 3 PR Day 90 Day 180
9 3 CR Day 180 Day 270
要使用文本,有很多选项,包括下面的tidyverse
(还有base
和其他选项。
library(dplyr)
library(stringr)
df %>%
mutate(Start = as.numeric(str_extract(Start, "[:digit:]+")),
End = as.numeric(str_extract(End, "[:digit:]+")),
Difference = End - Start,
)
我所做的是提取开始日期和结束日期的数字部分,然后减去它们。那就是您要找的东西吗?
Patient Response Start End Difference
1 1 PR 30 90 60
2 1 CR 90 180 90
3 1 CR 180 270 90
4 2 SD 30 90 60
5 2 SD 90 180 90
6 2 PD 180 270 90
7 3 PR 30 90 60
8 3 PR 90 180 90
9 3 CR 180 270 90