This is the dplyr version of this question
I have the following data.table
initial.date <- as.POSIXct(\'2018-10-27 10:00:00\',tz=\'GM
Solution using dplyr package and lapply function:
result_df <- do.call(rbind, lapply(1:nrow(res), function(row_id) {
temp <- res %>% filter(InstrumentSymbol == res$InstrumentSymbol[row_id]) %>%
mutate(time_diff = abs(difftime(res$datetime[row_id], datetime, units = "secs")),
diff_price = abs(TradePrice - res$TradePrice[row_id])) %>%
filter(id != res$id[row_id], time_diff <= 60) %>%
filter(diff_price == min(diff_price)) %>% select(TradePrice, id) %>%
rename(minpricewithin60 = TradePrice, index.minpricewithin60 = id)
if(nrow(temp) == 0) temp[1,] <- c(NA, NA)
return(bind_cols(res %>% slice(rep(row_id, nrow(temp))), temp))
}))
head(result_df)
PriorityDateTime TradePrice InstrumentSymbol id datetime minpricewithin60 index.minpricewithin60
1 2018-10-27 10:00:00 1 asset1 1 2018-10-27 10:00:00 3 3
2 2018-10-27 10:00:30 2 asset2 2 2018-10-27 10:00:30 4 4
3 2018-10-27 10:01:00 3 asset1 3 2018-10-27 10:01:00 1 1
4 2018-10-27 10:01:00 3 asset1 3 2018-10-27 10:01:00 5 5
5 2018-10-27 10:01:30 4 asset2 4 2018-10-27 10:01:30 2 2
6 2018-10-27 10:01:30 4 asset2 4 2018-10-27 10:01:30 6 6