Пусть у меня есть два dataframes,найти кратчайшее разницу во времени между двумя dataframes
df1
id time1
1 2016-04-07 21:39:10
1 2016-04-05 11:19:17
2 2016-04-03 10:58:25
2 2016-04-02 21:39:10
df2
id time2
1 2016-04-07 21:39:11
1 2016-04-05 11:19:18
1 2016-04-06 21:39:11
1 2016-04-04 11:19:18
2 2016-04-03 10:58:26
2 2016-04-02 21:39:11
2 2016-04-04 10:58:26
2 2016-04-05 21:39:11
Я хочу найти для каждой записи в df1, кратчайшим разница во времени в df2. Предположим, что мы берем первую запись, она имеет идентификатор 1, поэтому я хочу перебрать df2, фильтр для id 1, а затем проверить разницу во времени между одной записью df1 и остальными вхождениями df2 и найти кратчайшую разницу и получить соответствующую запись , Мой выход образец должен быть
id time time2 diff(in secs)
1 2016-04-07 21:39:10 2016-04-07 21:39:10 1
1 2016-04-05 11:19:17 2016-04-05 11:19:17 1
2 2016-04-03 10:58:25 2016-04-03 10:58:25 1
2 2016-04-02 21:39:10 2016-04-02 21:39:10 1
следующее моя попытка,
for(i in unique(df1$id)){
temp1 = df1[df1$id == i,]
temp2 = df2[df2$id == i,]
for(j in unique(df1$time1){
for(k in unique(df2$time2){
diff = abs(df1$time1[j] - df2$time2[k]
print(diff)}}}
Я не в состоянии прогрессировать после этого, получив много ошибок. Может ли кто-нибудь помочь мне в исправлении этого? Можно предложить более эффективный способ сделать это? Любая помощь будет оценена по достоинству.
Update:
воспроизводимое данные:
df1 <- data.frame(
id = c(1,1,2,2),
time1 = c('2016-04-07 21:39:10', '2016-04-05 11:19:17', '2016-04-03 10:58:25', '2016-04-02 21:39:10')
)
df2 <- data.frame(
id = c(1,1,1,1,2,2,2,2),
time2 = c('2016-04-07 21:39:11', '2016-04-05 11:19:18','2016-04-07 21:39:11', '2016-04-05 11:19:18', '2016-04-03 10:58:26', '2016-04-02 21:39:11','2016-04-03 10:58:26', '2016-04-02 21:39:11')
)
df1$time1 = as.POSIXct(df1$time1)
df2$time2 = as.POSIXct(df2$time2)
Можете ли вы добавить код для создания '' df1' и df2' – Divi
сделать 'id's дело вообще? ? звучит как кратчайшая разница внутри 'id' – jaimedash
@jaimedash да вместе с соответствующими моментами – haimen