Если я правильно понимаю; сначала мы конвертируем общую длину в объект продолжительности; после этого мы рассчитываем 20% длины; затем мы используем случайную выборку из равномерного распределения (runif
функция), чтобы выбрать место для начала, которое должно быть где-то между началом и концом минус размер выборки,
library(lubridate)
library(dplyr)
foo = tibble(duration = c("00:22:11", "00:00:48", "00:25:00"))
foo %>% mutate(recording_duration = duration(as.duration(hms(duration)))) %>%
mutate(sample_size = recording_duration*.2) %>%
mutate(random_sample_start = runif(1)*(recording_duration-sample_size)) %>%
mutate(random_sample_start_hms = seconds_to_period(random_sample_start)) %>%
mutate(random_sample_end = seconds_to_period(random_sample_start + sample_size )) %>%
select(duration, random_sample_start_hms, random_sample_end, sample_size)
, и это выглядит как это:
# A tibble: 3 x 4
duration random_sample_start_hms random_sample_end sample_size
<chr> <Period> <Period> <Duration>
1 00:22:11 17M 22.8747033467516S 21M 49.0747033467517S 266.2s (~4.44 minutes)
2 00:00:48 37.6093056052923S 47.2093056052923S 9.6s
3 00:25:00 19M 35.290800165385S 24M 35.290800165385S 300s (~5 minutes)