Как я могу создать временную шкалу из нескольких предметов без использования даты в R? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть набор данных по предметам, которые я хочу сравнить, основываясь на днях после лечения, а не на фактических датах их лечения и последующих наблюдениях.

Мой мыслительный процесс заключается в том, что было бы намного проще визуализировать, если бы все предметы начинались в одной и той же точке и заканчивались в одной и той же точке, а не распределялись по нескольким годам из-за того, что предметы начинались в разное время.

Есть ли способ сделать это в 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")))

Пример Данные

1 Ответ

0 голосов
/ 20 февраля 2020

Таким образом, из приведенного вами примера ваши данные на самом деле не цифры c или дата, а текст.

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,
         )

Что я сделал, так это извлек числовую часть c ваших дат начала и окончания и затем вычел их. Это то, что вы ищете, верно?

  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
...