
Length of longest continuous period above/below threshold
Source:R/metric_period_above_threshold.R
period_above_threshold.RdThis function finds the length of the longest continous period above/below a specified threshold light level or within a specified range of light levels.
Usage
period_above_threshold(
Light.vector,
Time.vector,
comparison = c("above", "below"),
threshold,
epoch = "dominant.epoch",
loop = FALSE,
na.replace = FALSE,
na.rm = FALSE,
as.df = FALSE
)Arguments
- Light.vector
Numeric vector containing the light data.
- Time.vector
Vector containing the time data. Can be POSIXct, hms, duration, or difftime.
- comparison
String specifying whether the period of light levels above or below threshold should be calculated. Can be either
"above"(the default) or"below". If two values are provided forthreshold, this argument will be ignored.- threshold
Single numeric value or two numeric values specifying the threshold light level(s) to compare with. If a vector with two values is provided, the period of light levels within the two thresholds will be calculated.
- epoch
The epoch at which the data was sampled. Can be either a duration or a string. If it is a string, it needs to be either
"dominant.epoch"(the default) for a guess based on the data, or a valid duration string, e.g.,"1 day"or"10 sec".- loop
Logical. Should the data be looped? Defaults to
FALSE.- na.replace
Logical. Should missing values (NA) be replaced for the calculation? If
TRUEmissing values will not be removed but will result inFALSEwhen comparingLight.vectorwiththreshold. Defaults toFALSE.- na.rm
Logical. Should missing values (NA) be removed for the calculation? If
TRUE, this argument will overridena.replace. Defaults toFALSE.- as.df
Logical. Should a data frame be returned? If
TRUE, a data frame with a single column namedperiod_{comparison}_{threshold}will be returned. Defaults toFALSE.
Value
A duration object (see duration) as single value,
or single column data frame.
See also
Other metrics:
bright_dark_period(),
centroidLE(),
disparity_index(),
dose(),
duration_above_threshold(),
exponential_moving_average(),
frequency_crossing_threshold(),
interdaily_stability(),
intradaily_variability(),
midpointCE(),
nvRC(),
nvRD(),
nvRD_cumulative_response(),
pulses_above_threshold(),
threshold_for_duration(),
timing_above_threshold()
Examples
N <- 60
# Dataset with continous period of >250lx for 35min
dataset1 <-
tibble::tibble(
Id = rep("A", N),
Datetime = lubridate::as_datetime(0) + lubridate::minutes(1:N),
MEDI = c(sample(1:249, N-35, replace = TRUE),
sample(250:1000, 35, replace = TRUE))
)
dataset1 %>%
dplyr::reframe("Period >250lx" = period_above_threshold(MEDI, Datetime, threshold = 250))
#> # A tibble: 1 × 1
#> `Period >250lx`
#> <Duration>
#> 1 2100s (~35 minutes)
dataset1 %>%
dplyr::reframe("Period <250lx" = period_above_threshold(MEDI, Datetime, "below", threshold = 250))
#> # A tibble: 1 × 1
#> `Period <250lx`
#> <Duration>
#> 1 1500s (~25 minutes)
# Dataset with continous period of 100-250lx for 20min
dataset2 <-
tibble::tibble(
Id = rep("B", N),
Datetime = lubridate::as_datetime(0) + lubridate::minutes(1:N),
MEDI = c(sample(c(1:99, 251-1000), N-20, replace = TRUE),
sample(100:250, 20, replace = TRUE)),
)
dataset2 %>%
dplyr::reframe("Period 250lx" = period_above_threshold(MEDI, Datetime, threshold = c(100,250)))
#> # A tibble: 1 × 1
#> `Period 250lx`
#> <Duration>
#> 1 1200s (~20 minutes)
# Return data frame
dataset1 %>%
dplyr::reframe(period_above_threshold(MEDI, Datetime, threshold = 250, as.df = TRUE))
#> # A tibble: 1 × 1
#> period_above_250
#> <Duration>
#> 1 2100s (~35 minutes)