Сравнение отметок времени в пределах поля в R - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь найти общие временные метки между двумя фреймами данных. Между ними есть небольшая разница, которая может варьироваться до 1 мин. Конечная цель - получить индексный номер t1 , который соответствует t2 .

Один из подходов, которые я попытался, приведен ниже:

t1<-c("2019-12-02 12:40:38", "2019-12-02 12:41:42", "2019-12-18 08:50:59", "2019-12-18 10:27:35", "2019-12-18 10:31:37", "2019-12-18 13:11:57")
 
t2<-c("2019-12-02 12:39:57", "2019-12-02 12:40:34", "2019-12-02 13:16:10", "2019-12-02 14:08:23", "2019-12-18 10:26:17", "2019-12-18 10:31:58", "2019-12-18 13:10:45")

t1<-as.POSIXct(strptime(t1, "%Y-%m-%d %H:%M"))
t2<-as.POSIXct(strptime(t2, "%Y-%m-%d %H:%M"))

common_time<-format(anytime(intersect(t1,t2)), "%Y-%m-%d %H:%M")

Я также пробовал округлять до ближайшей минуты (используя round_date (1 minutes) ), при этом пропущены некоторые значения (например, 12:41:42 и 12:40:34). Мои вопросы:

i) Как я могу получить все порядковые номера t1 , соответствующие t2 , исходя из вышеизложенного? ii) Есть ли лучший подход к этому?

Обычно в T2 будет меньше элементов, чем в T1. Ссылка на полные наборы данных ниже:

T1: https://www.dropbox.com/s/7nhxdvhbrhkb6rt/file_modified_times.csv?dl=0

T2: https://www.dropbox.com/s/nm72na37u0dkzil/OS_times.csv?dl=0

Заранее спасибо .

1 Ответ

1 голос
/ 20 июня 2020

Вы можете использовать nearest из data.table:

t1<-c("2019-12-02 12:40:38", "2019-12-02 12:41:42", "2019-12-18 08:50:59", "2019-12-18 10:27:35", "2019-12-18 10:31:37", "2019-12-18 13:11:57")

t2<-c("2019-12-02 12:39:57", "2019-12-02 12:40:34", "2019-12-02 13:16:10", "2019-12-02 14:08:23", "2019-12-18 10:26:17", "2019-12-18 10:31:58", "2019-12-18 13:10:45")

T1<-as.POSIXct(t1)
T2<-as.POSIXct(t2)


T1 <- data.table(t1 = T1)
T2 <- data.table(t2 = T2)

T1[T2,roll='nearest',.(x.t1,t2,dt=difftime(t2,x.t1)),on=.(t1==t2),allow.cartesian=T]

                  x.t1                  t2        dt
1: 2019-12-02 12:40:38 2019-12-02 12:39:57  -41 secs
2: 2019-12-02 12:40:38 2019-12-02 12:40:34   -4 secs
3: 2019-12-02 12:41:42 2019-12-02 13:16:10 2068 secs
4: 2019-12-02 12:41:42 2019-12-02 14:08:23 5201 secs
5: 2019-12-18 10:27:35 2019-12-18 10:26:17  -78 secs
6: 2019-12-18 10:31:37 2019-12-18 10:31:58   21 secs
7: 2019-12-18 13:11:57 2019-12-18 13:10:45  -72 secs
...