2020-08-28 19:53:00 +02:00
|
|
|
library("tidyverse")
|
2021-03-28 20:31:02 +02:00
|
|
|
library("glue")
|
2020-10-23 16:41:00 +02:00
|
|
|
library("lubridate", warn.conflicts = F)
|
2020-09-28 17:38:47 +02:00
|
|
|
options(scipen=999)
|
2020-08-28 19:53:00 +02:00
|
|
|
|
2021-03-28 20:31:02 +02:00
|
|
|
assign_rows_to_segments <- function(data, segments){
|
|
|
|
# This function is used by all segment types, we use data.tables because they are fast
|
|
|
|
data <- data.table::as.data.table(data)
|
|
|
|
data[, assigned_segments := ""]
|
|
|
|
for(i in seq_len(nrow(segments))) {
|
|
|
|
segment <- segments[i,]
|
|
|
|
data[segment$segment_start_ts<= timestamp & segment$segment_end_ts >= timestamp,
|
|
|
|
assigned_segments := stringi::stri_c(assigned_segments, segment$segment_id, sep = "|")]
|
2020-10-19 21:07:12 +02:00
|
|
|
}
|
2021-03-28 20:31:02 +02:00
|
|
|
data[,assigned_segments:=substring(assigned_segments, 2)]
|
|
|
|
data
|
2020-09-14 22:19:42 +02:00
|
|
|
}
|
|
|
|
|
2021-04-06 19:58:58 +02:00
|
|
|
assign_to_time_segment <- function(sensor_data, time_segments, time_segments_type, include_past_periodic_segments, most_common_tz){
|
2020-10-19 21:07:12 +02:00
|
|
|
|
2020-12-03 00:41:03 +01:00
|
|
|
if(nrow(sensor_data) == 0 || nrow(time_segments) == 0)
|
2020-09-30 20:53:59 +02:00
|
|
|
return(sensor_data %>% mutate(assigned_segments = NA))
|
2020-10-19 21:07:12 +02:00
|
|
|
|
2021-03-28 20:31:02 +02:00
|
|
|
if (time_segments_type == "FREQUENCY" || time_segments_type == "PERIODIC"){ #FREQUENCY segments are just syntactic sugar for PERIODIC
|
|
|
|
source("src/data/datetime/assign_to_periodic_segments.R")
|
|
|
|
sensor_data <- assign_to_periodic_segments(sensor_data, time_segments, include_past_periodic_segments)
|
2020-10-19 21:07:12 +02:00
|
|
|
return(sensor_data)
|
2020-09-16 20:54:20 +02:00
|
|
|
|
2020-12-03 00:41:03 +01:00
|
|
|
} else if ( time_segments_type == "EVENT"){
|
2021-03-28 20:31:02 +02:00
|
|
|
source("src/data/datetime/assign_to_event_segments.R")
|
2021-04-06 19:58:58 +02:00
|
|
|
sensor_data <- assign_to_event_segments(sensor_data, time_segments, most_common_tz)
|
2021-03-28 20:31:02 +02:00
|
|
|
return(sensor_data)
|
2020-09-14 21:14:41 +02:00
|
|
|
}
|
|
|
|
}
|