按随机间隔选择tibble中的行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按随机间隔选择tibble中的行相关的知识,希望对你有一定的参考价值。

我正在尝试采用一系列日期 - 从第一个日期开始 - 按照正态分布生成的随机数选择后续日期。目前我的代码通过随机数选择行号,但每次都使用相同的数字。在此示例中,它每12天选择一行:

set.seed(123)

library(tidyverse)
library(lubridate)

start_date <- as.Date('2018-03-01')
end_date <- as.Date('2018-07-01')

seq_dates <- seq(ymd(start_date), ymd(end_date), by='1 days')

seq_dates <- seq_dates %>%
  as.tibble()
seq_dates

seq_dates %>% 
  filter(row_number() %% round(rnorm(n=1, mean=14, sd=3), 0) == 1) 

有没有办法用dplyr做到这一点,但每次都以随机的间隔从开始日期中选择一行?所以从2018-03-01开始,下一个日期可能是12天后,然后是14天后,然后是19天后,等等?

答案
library(dplyr)

set.seed(10) 
n <- rnorm(50, 14, 3)
rows <- cumsum(round(n, 0))
diff(rows) # random ~normal increments used when selecting your rows
#  [1] 13 10 12 15 15 10 13  9 13 17 16 13 17 16 14 11 13 17 15 12  7 12  8 10 13 12 11 14 13  8 14 17
# [33] 15 10 10 15  9 13 12 17 12 12 17 11 14 15 13 12 16

seq_dates %>% 
  slice(rows[rows <= n()])
# # A tibble: 9 x 1
#   value     
#   <date>    
# 1 2018-03-14
# 2 2018-03-27
# 3 2018-04-06
# 4 2018-04-18
# 5 2018-05-03
# 6 2018-05-18
# 7 2018-05-28
# 8 2018-06-10
# 9 2018-06-19

以上是关于按随机间隔选择tibble中的行的主要内容,如果未能解决你的问题,请参考以下文章

按嵌套 tibble 中作为字符串向量给出的变量对 tibble 进行分组

SQL:仅选择以给定间隔与其他结果分隔的值的行

通过 ID 与公式组合(或类似 tidy tibble 上的时间序列操作)向 tibble /dataframes 添加额外的行

随机游走模型(RandomWalk Mobility)

在一个结果行中选择具有给定时间间隔的 id 历史记录的行 [关闭]

选择行的间隔,包括一些带有 where 和 order 子句的行