library(DBI) library(tidyr) con <- dbConnect(RPostgres::Postgres(), dbname='mainscnt', host='172.16.10.27', user='wn') START <- "2021-08-02T14:00:00.0Z" END <- "2021-08-02T15:00:00.0Z" res <-dbSendQuery(con, "select time, location, freq from mainsfrequency where valid=1 and time >= $1 and time < $2") dbBind(res, list(START, END)) frequencies <- dbFetch(res) dbClearResult(res) freq_wide <- frequencies %>% pivot_wider(names_from = location, values_from = freq, values_fn = mean) THRESHOLD <- 0.5 for (colIdx in 2:length(freq_wide)) { last <- freq_wide[[1, colIdx]] for (rowIdx in 1:length(freq_wide[[colIdx]])) { current <- freq_wide[[rowIdx, colIdx]] if (!is.na(current) && !is.na(last) && (abs(current - last) > THRESHOLD)) { freq_wide[[rowIdx, colIdx]] = NA } last <- current } } freq_wide <- freq_wide %>% rowwise() %>% mutate(mad = mad(c_across(names(freq_wide)[-1]), na.rm=TRUE)) # print(summary(freq_wide)) print(sum(freq_wide$mad) / length(freq_wide$mad)) dbDisconnect(con)