在时间范围内随机选择20%

问题描述 投票:0回答:1

我有很多要分析的记录,但是没有足够的时间来浏览每个记录的全部。所以现在我想在R中做的就是在其中放入一个csv文档。带有文件名和录制的持续时间。例如:

enter image description here

现在我希望R做的是为每个文件随机选择20%的持续时间。然后将这些数字与文件名一起放在新表中。在R中可以这样做吗?

干杯,西蒙妮

r random sampling duration
1个回答
0
投票

如果我理解正确,首先,我们将总长度转换为持续时间对象;之后,我们计算长度的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)     
© www.soinside.com 2019 - 2024. All rights reserved.