Векторы в R, используя компоненты в двух векторах для создания нового вектора - PullRequest
1 голос
/ 09 февраля 2020

Итак, у меня есть вектор, представляющий время начала (trt.start) и время окончания (trt.end). Каждое из времен начала представляет одну обработку (которая занимает 400 дней), и соответствующая позиция в векторе trt.end представляет конец.

trt.start = c(10000,10090,10180,10270, 10360) 
trt.end = c(trt.start + 400)

Есть ли способ (без жесткого кодирования), создать новый вектор, который будет представлять продолжительность каждой процедуры? Таким образом, это приведет к:

c(10000:10400, 10090:10490, 10180:10580, 10270:10670, 10360:10760)

Я бы хотел сделать это без жесткого кодирования, потому что вектор trt.start изменит значения.

Спасибо!

1 Ответ

1 голос
/ 09 февраля 2020

В R мы можем использовать Map для получения последовательности соответствующих векторов в list, а затем unlist в list для создания единственного vector

v1 <- unlist(Map(`:`, trt.start, trt.end))
length(v1)
#[1] 2005

Если нам нужно как string

v1 <- sprintf("%d:%d", trt.start, trt.end)
v1
#[1] "10000:10400" "10090:10490" "10180:10580" "10270:10670" "10360:10760"

или с paste

v1 <- paste0(trt.start, ":", trt.end)
v1  
#[1] "10000:10400" "10090:10490" "10180:10580" "10270:10670" "10360:10760"

Или векторизованным вариантом будет rep лицензировать 'trt.start ', а затем добавить с последовательностью значений

v2 <- rep(trt.start, each = 401) + seq_len(401) -1
all.equal(v2, v1)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...