library(data.table)
set.seed(333)
t <- data.table(old=seq(from=as.POSIXct("2013-01-01"),
to=as.POSIXct("2013-01-02"), by="15 mins"),
dif=as.difftime(sample(seq(15,120,15),97,replace=TRUE),units="mins"))
t$new <- t$old + t$dif; t$foo <- rnorm(97); t$dif <- NULL
i <- data.table(id=1:3, start=sample(seq(from=as.POSIXct("2013-01-01"),
to=as.POSIXct("2013-01-01 22:00:00"), by="15 mins"),3))
> head(t)
old new foo
1: 2013-01-01 00:00:00 2013-01-01 01:00:00 -1.5434407
2: 2013-01-01 00:15:00 2013-01-01 00:30:00 -0.2753971
3: 2013-01-01 00:30:00 2013-01-01 02:30:00 -1.5986916
4: 2013-01-01 00:45:00 2013-01-01 02:00:00 -0.6288528
5: 2013-01-01 01:00:00 2013-01-01 01:15:00 -0.8967041
6: 2013-01-01 01:15:00 2013-01-01 02:45:00 -1.2145590
> i
id start
1: 1 2013-01-01 22:00:00
2: 2 2013-01-01 21:00:00
3: 3 2013-01-01 13:30:00
Эти данные показывают одну таблицу данных с временными интервалами для каждого квартала вместе с другими переменными, представленными foo
. Другая таблица данных показывает для каждой id
начальную точку в пределах временного окна. Как и в моем предыдущем вопросе , я хочу удалить строки из t
так, чтобы только те строки остались там, где new[i] = old[i-1]
, давая каждому ID непрерывную последовательность n
временных точек. Результат должен выглядеть следующим образом:
n=2
> ans
id old new foo
1: 1 2013-01-01 22:00:00 2013-01-01 23:00:00 -0.36643134
2: 1 2013-01-01 23:00:00 2013-01-02 00:15:00 0.75903779
3: 2 2013-01-01 21:00:00 2013-01-01 22:15:00 0.98787668
4: 2 2013-01-01 22:15:00 2013-01-02 00:00:00 1.51498914
5: 3 2013-01-01 13:30:00 2013-01-01 15:30:00 1.95255430
5: 3 2013-01-01 15:30:00 2013-01-01 16:45:00 0.03339041
Мне было указано на следующее решение, которое работало с примерами данных, где моменты времени были числовыми:
set.seed(333)
t <- data.table(old=1002:2001, dif=sample(1:10,1000, replace=TRUE))
t$new <- t$old + t$dif; t$foo <- rnorm(1000); t$dif <- NULL
i <- data.table(id=1:3, start=sample(1000:1990,3))
library(igraph)
g <- graph_from_edgelist(as.matrix(t[,1:2]))
i[, t[old %in% subcomponent(g, start, "out")[1:n]], by=.(id)]
В отличие от этого, настоящая проблема имеет временные точки POSIXct, что вызывает проблемы в функции subcomponent(.)
. Кто-нибудь знает решение для этих обстоятельств?
PS. Извиняюсь за размещение подобных вопросов. Я думал, что оригинальный пост был достаточно общим, чтобы иметь отношение и к другим. Но оно оказалось слишком общим для моего случая.