«Метки» данных временного ряда, которые находятся в пределах временного диапазона, определенного в отдельном кадре данных - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть умеренно большие файлы данных датчика с датой и временем и указанным c идентификатором прибора. Прибор произвел выборку из разных мест, и я хочу создать столбец, который помечает измерение датчика как заданный c участок, если время выборки не превышает двух значений времени, указанных в другом кадре данных.

В файле данных есть дата и время, идентификатор прибора и данные датчика.

Вот фиктивные данные:

data <- data.frame(date=seq.POSIXt(as_datetime("2019-04-13 17:00:00"),as_datetime("2019-04-13 23:30:00"),by="10 min"),
                   instrument=rep(c("rbr84","rbr85"),each=20),temp.c=sample.int(10, 40,replace=TRUE))

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

вот фиктивные диапазоны дат:

library(lubridate)
date.range <- date.range <- data.frame(instrument=rep(c("rbr84","rbr85"),each=2),site=c("site1","site2","site3","site4"),
                         start.time=c("2019-04-13 17:10:00","2019-04-13 18:30:00","2019-04-13 20:30:00","2019-04-13 22:30:00"),
                         end.time=c("2019-04-13 17:50:00","2019-04-13 19:30:00","2019-04-13 21:50:00","2019-04-13 23:10:00"))

date.range$start.time <- ymd_hms(date.range$start.time)
date.range$end.time <- ymd_hms(date.range$end.time)

Если данные $ datetime находятся в пределах date.range $ start.time и date.range $ end.time, я хочу поместить соответствующую метку сайта в столбец данных $ site.

I Вы слили кадры данных по инструменту и использовали условный фильтр:

library(tidyverse)
match <- merge(date.range, data, by="instrument")%>%
  filter(date >= start.time & date <= end.time)%>%
  select(date, instrument, site, temp.c)

Но мои файлы данных имеют временные точки 100 000, так что это создает действительно большие файлы слияния.

Есть ли способ сделать это без соответствия каждой возможной комбинации инструментов? Открыто, чтобы не использовать датафреймы, это то, с чем я больше всего знаком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...