Skip to content

Commit

Permalink
Update stop_sensor.R
Browse files Browse the repository at this point in the history
Creation of subfunction to clarify the main one
  • Loading branch information
cpetinon committed Jun 5, 2024
1 parent e83923e commit 7209173
Showing 1 changed file with 59 additions and 35 deletions.
94 changes: 59 additions & 35 deletions stop_sensor.R
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
#' @param enriched_data enriched data.frame containing all the data for all your sensors
#' @param date_range Date vector. example: c('2021-01-01','2022-01-01'). Full period if NULL (default).
#' @param segments Character vector. Selected road segment, all if NULL (default).
#' @param uptime Real. Uptime choosen. Default to 0.5.
#' @param successive_day Integer. Number of day choosen. Default to 2
#' @param uptime_choice
#'
#' @return enriched_data
#' @export
Expand Down Expand Up @@ -41,14 +41,7 @@ retrieve_missing_data<- function(enriched_data,
else
{
#Hours with no data
enriched_data$date <- ymd_hms(enriched_data$date)
enriched_data$season <- ifelse(month(enriched_data$date) %in% c(3,4,5), "Spring",
ifelse(month(enriched_data$date) %in% c(6,7,8), "Summer",
ifelse(month(enriched_data$date) %in% c(9,10,11), "Autumn", "Winter")))

df_season<-enriched_data %>% group_by(segment_id,season,hour) %>% summarise(condition=any(car!=0 & uptime>uptime_choice))

enriched_data <- enriched_data %>% semi_join(df_season %>% filter(condition), by = c("segment_id","season", "hour"))
enriched_data<-retrieve_missing_hours(enriched_data,uptime_choice)

#Inactivity Period
enriched_data <- enriched_data %>%
Expand All @@ -59,35 +52,66 @@ retrieve_missing_data<- function(enriched_data,
pedestrian_NA = pedestrian
)

list_clear_data <- list()
seg_id<-unique(enriched_data$segment_id)

for(id in 1:length(seg_id))
replace_inactivity_period(enriched_data,successive_day,uptime_choice)
}
return(enriched_data)
}





retrieve_missing_hours<-function(enriched_data,uptime_choice)
{
enriched_data$date <- ymd_hms(enriched_data$date)
enriched_data$season <- ifelse(month(enriched_data$date) %in% c(3,4,5), "Spring",
ifelse(month(enriched_data$date) %in% c(6,7,8), "Summer",
ifelse(month(enriched_data$date) %in% c(9,10,11), "Autumn", "Winter")))

df_season<-enriched_data %>% group_by(segment_id,season,hour) %>% summarise(condition=any(car!=0 & uptime>uptime_choice))

enriched_data <- enriched_data %>% semi_join(df_season %>% filter(condition), by = c("segment_id","season", "hour"))

return(enriched_data)
}







replace_inactivity_period<-function (enriched_data,successive_day,uptime_choice)
{
list_clear_data <- list()
seg_id<-unique(enriched_data$segment_id)

for(id in 1:length(seg_id))
{
df_segment<-enriched_data[enriched_data$segment_id==seg_id[id],]
for(i in 1:length(df_segment$car))
{
df_segment<-enriched_data[enriched_data$segment_id==seg_id[id],]
for(i in 1:length(df_segment$car))
{
j=i
while ((df_segment$car[i]==0 | df_segment$uptime[i]<uptime_choice) & i<length(df_segment$car))
{i<-i+1}
j=i
while ((df_segment$car[i]==0 | df_segment$uptime[i]<uptime_choice) & i<length(df_segment$car))
{i<-i+1}

diff_days<-abs(as.numeric(difftime(df_segment$day[i], df_segment$day[j], units = "days")))
diff_days<-abs(as.numeric(difftime(df_segment$day[i], df_segment$day[j], units = "days")))

if(diff_days>successive_day)
{
df_segment <- df_segment %>%
mutate_at(vars(heavy_NA, car_NA, bike_NA,pedestrian_NA), ~ ifelse(row_number() %in% j:i, NA,.))
}
if(diff_days>successive_day)
{
df_segment <- df_segment %>%
mutate_at(vars(heavy_NA, car_NA, bike_NA,pedestrian_NA), ~ ifelse(row_number() %in% j:i, NA,.))
}
list_clear_data[[id]]<-df_segment
}
enriched_data<-list_clear_data[[1]]

if(length(seg_id)>1)
{
for(i in 2:length(seg_id))
{enriched_data<-rbind(enriched_data,list_clear_data[[i]])}
}
}
return(enriched_data)
list_clear_data[[id]]<-df_segment
}
enriched_data<-list_clear_data[[1]]

if(length(seg_id)>1)
{
for(i in 2:length(seg_id))
{enriched_data<-rbind(enriched_data,list_clear_data[[i]])}
}

return(enriched_data)
}

0 comments on commit 7209173

Please sign in to comment.