Таким образом, из приведенного вами примера ваши данные на самом деле не цифры 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