Как выровнять несколько временных рядов (разных дат) в относительном времени и установить событие (b) как время 0 для всех временных рядов? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть серия времен, измеряющая переменную «а» часто (в действительности, данные каждую минуту) и b как событие (например, землетрясение). Я хочу увидеть, как событие влияет на значение временных рядов непосредственно до и после.

Поэтому для каждого события b я хочу создать временной ряд в относительном времени и выровнять временные ряды вокруг события b (поэтомуначальная точка будет b как время 0), а значения до этого времени будут иметь метки -1, -2 и после b 1, 2 ... и т. д. Для этого примера достаточно иметь 3 значения до и после события. В моменты времени: -3, -2, -1, 0, 1, 2, 3

Как мне лучше всего это сделать?

Я пытался преобразовать их все в относительное время, но не могупохоже, что они выровнены вокруг b с временем 0, так как частота наблюдения отличается между ID. (оптимально я хотел бы наблюдать за тем, что происходит за 24 часа до и через 24 часа после события b. И в моих данных b может когда-нибудь последовать 2 часа данных, а затем ничего - для узлов я хотел бы, чтобы это было NA)

ID <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3)
Date <- as.POSIXct(c("2019-10-01 08:00", "2019-10-01 09:00", "2019-10-01 10:00", "2019-10-01 11:00",
                     "2019-10-01 12:00","2019-10-01 13:00","2019-10-01 14:00","2019-10-01 15:00"
                     ,"2012-01-01 07:00","2012-01-01 08:00","2012-01-01 09:00","2012-01-01 10:00"
                     ,"2012-01-01 11:00","2012-01-01 12:00","2012-01-01 13:00","2012-01-01 14:00",
                     "2014-08-12 13:00","2014-08-12 14:00","2014-08-12 15:00","2014-08-12 16:00",
                     "2014-08-12 17:00","2014-08-12 18:00","2014-08-12 19:00","2014-08-12 20:00"))
Name <- c("a","a","a","a","a","a","b","a","a","a","a","a","b","a","a","a","a","a","a", "b", "a", "a","a","b")
Value <- c(12, 14, 15, 15, 15, 13, 14, 26, 54, 50, 64, 53, 63, 64 ,2, 12, 24, 53, 64, 75, 2, 13, 13, 12)

df <- data.frame(ID, Date, Name, Value)

Ожидаемый результат:

ID1 <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3)
Date1 <- c("-6", "-5", "-4", "-3",
                     "-2","-1","0","1"
                     ,"-4","-3","-2","-1"
                     ,"0","1","2","3",
                     "-3","-2","-1","0",
                     "1","2","3","0")
Name1 <- c("a","a","a","a","a","a","b","a","a","a","a","a","b","a","a","a","a","a","a", "b", "a", "a","a","b")
Value1 <- c(12, 14, 15, 15, 15, 13, 14, 26, 54, 50, 64, 53, 63, 64 ,2, 12, 24, 53, 64, 75, 2, 13, 13, 12)

df_exp <- data.frame(ID1, Date1, Name1, Value1)

Хотя - я бы хотел, чтобы буква "b" в конце ID = 3 также стала отдельным временным рядом с ID = 3 и значениями -3, -2,1,0, NA, NA, NA .. --- Я не могу выделить еще один b с тем же идентификатором в свой собственный временной ряд.

Большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 11 октября 2019

Вот возможный подход с использованием полусоединения с использованием data.table:

library(data.table)
setDT(df)
i <- df[df[Name=="b", .(Date=Date+60*60*(-3:3)), .(ID, d=Date)], 
    on=.(ID, Date), which=TRUE, nomatch=0L]
df[i]

output:

    ID                Date Name Value
 1:  1 2019-10-01 11:00:00    a    15
 2:  1 2019-10-01 12:00:00    a    15
 3:  1 2019-10-01 13:00:00    a    13
 4:  1 2019-10-01 14:00:00    b    14
 5:  1 2019-10-01 15:00:00    a    26
 6:  2 2012-01-01 08:00:00    a    50
 7:  2 2012-01-01 09:00:00    a    64
 8:  2 2012-01-01 10:00:00    a    53
 9:  2 2012-01-01 11:00:00    b    63
10:  2 2012-01-01 12:00:00    a    64
11:  2 2012-01-01 13:00:00    a     2
12:  2 2012-01-01 14:00:00    a    12
13:  3 2014-08-12 13:00:00    a    24
14:  3 2014-08-12 14:00:00    a    53
15:  3 2014-08-12 15:00:00    a    64
16:  3 2014-08-12 16:00:00    b    75
17:  3 2014-08-12 17:00:00    a     2
18:  3 2014-08-12 18:00:00    a    13
19:  3 2014-08-12 19:00:00    a    13
20:  3 2014-08-12 17:00:00    a     2
21:  3 2014-08-12 18:00:00    a    13
22:  3 2014-08-12 19:00:00    a    13
23:  3 2014-08-12 20:00:00    b    12
    ID                Date Name Value
...