data.table: определить возрастающую последовательность в data.table - PullRequest
1 голос
/ 22 февраля 2020

Я пытаюсь определить непрерывную увеличивающуюся последовательность в столбце в data.table и назначить идентификатор для каждой уникальной непрерывной группировки последовательностей, но мне трудно найти векторизованный способ быстрой идентификации этих последовательностей. ,

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

library(data.table)

DT <- data.table(ID=c(1,1,1,1),time=c(17,18,74,75),exposure=c(0,1,1,1))

My данные выглядят так:

   ID time exposure
1:  1   17        0
2:  1   18        1
3:  1   74        1
4:  1   75        1

, и я хочу создать новый столбец, который указывает, какие строки для time являются непрерывной возрастающей последовательностью, например:

   ID time exposure contiguous.groups
1:  1   17        0                x1
2:  1   18        1                x1
3:  1   74        1                x2
4:  1   75        1                x2

Если кто-нибудь делал это раньше или имеет представление о том, как начать, ваша помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 22 февраля 2020

Мы можем взять diff соседнего элемента 'time', чтобы создать логический вектор и получить кумулятивную сумму

DT[, contiguous.groups := paste0("x", cumsum(c(TRUE, diff(time) != 1)))]
DT
#   ID time exposure contiguous.groups
#1:  1   17        0                x1
#2:  1   18        1                x1
#3:  1   74        1                x2
#4:  1   75        1                x2
...