【问题标题】:select rows in tibble by a random interval按随机间隔选择 tibble 中的行
【发布时间】:2018-12-07 16:54:17
【问题描述】:

我正在尝试获取一系列日期 - 从第一个日期开始 - 通过从正态分布生成的随机数选择后续日期。目前我有通过随机数选择行号的代码,但它每次都使用相同的数字。在此示例中,它每 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 天后,等等?

【问题讨论】:

    标签: r dplyr tidyverse lubridate


    【解决方案1】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 2018-05-14
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多