【问题标题】:Random selecting 20% between a time frame在时间范围内随机选择 20%
【发布时间】:2020-07-14 18:51:13
【问题描述】:
我有很多录音要分析,但没有足够的时间浏览每个录音的全部内容。所以现在我想在 R 中做的是在其中放置一个 CSV 文档。带有文件名和录制的持续时间。例如:
现在我希望 R 为每个文件随机选择 20% 的持续时间。然后将这些数字与文件名放在一个新表中。这可以在 R 中做到吗?
【问题讨论】:
标签:
r
random
sampling
duration
【解决方案1】:
如果我理解正确;首先我们将总长度转换为持续时间对象;之后我们计算长度的 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)