Как объединить ограничения на основе R-данных в столбце времени
У меня есть две таблицы R, каждая со списком пользователей и отметкой времени, соответствующей времени, когда они предприняли определенное действие.
Первый из них (df1
) две таблицы содержат исчерпывающий список пользователей, и у пользователей будет несколько строк с разными временными метками.
Второй (df2
) будет иметь более ограниченный список пользователей, но опять же пользователи будут находиться в таблице несколько раз с разными временными метками.
То, что я хотел бы сделать, это соединить две таблицы и получить таблицу, которая соответствует пользователю вdf1
с ближайшей отметкой времени вdf2
, пока отметка времени вdf2
получилосьпосле один вdf1
.
Например, если бы у меня было две таблицы вроде:
df1 <- data.frame(c(1,1,2,3), as.POSIXct(c('2016-12-01 08:53:20', '2016-12-01 12:45:47', '2016-12-01 15:34:54', '2016-12-01 00:49:50')))
names(df1) <- c('user', 'time')
df2 <- data.frame(c(1,1,3), as.POSIXct(c('2016-12-01 07:11:01', '2016- 12-01 11:50:11', '2016-12-01 01:19:10')))
names(df2) <- c('user', 'time')
Давать нам:
> df1
user time
1 1 2016-12-01 08:53:20
2 1 2016-12-01 12:45:47
3 2 2016-12-01 15:34:54
4 3 2016-12-01 00:49:50
> df2
user time
1 1 2016-12-01 07:11:01
2 1 2016-12-01 11:50:11
3 3 2016-12-01 01:19:10
Результат, на который я надеюсь получить, будет выглядеть так:
user time_1 time_2
1 2016-12-01 08:53:20 2016-12-01 11:50:11
1 2016-12-01 12:45:47 NA
2 2016-12-01 15:34:54 NA
3 2016-12-01 00:49:50 2016-12-01 01:19:10
Я застрял на пути, чтобы заставить это объединение работать. В качестве дополнительного уровня сложности мне бы понравилось, если бы был параметр, который контролировал временное окно, чтобы разрешить совпадение (то есть, только присоединяться к строке изdf2
если это внутриX
минутыdf1
), но на самом деле это вторично по отношению к основной проблеме.