来自 lubridate 数据集的随机四分之一时间数据的子集

subset random quarter time data from a lubridate dataset

如何使用 match() 函数生成随机季度(如一月、二月、三月)和 select 数据子集:与生成的随机季度以及第一列和第三列相对应的行。

假设我们有一个 12 行 3 列的时间数据,像这样:

      dates     strings    numbers
1  2017-01-31       S       5
2  2017-02-28       T       1
3  2017-03-31       C       8
4  2017-04-30       Q       2
5  2017-05-31       D       6
6  2017-06-30       X      12
7  2017-07-31       N      10
8  2017-08-31       Y       9
9  2017-09-30       P      11
10 2017-10-31       G       4
11 2017-11-30       F       7
12 2017-12-31       R       3

我的意思是很容易 select 在数据集中随机选择 3 行并仅对第 1 列和第 3 列进行子集化。像这样,

df[sample(nrow(df), 3),c("dates","numbers")]

因此,我有,

        dates    numbers
5  2017-05-31       1
9  2017-09-30       4
11 2017-11-30      12

但是你怎么能通过使用 match() 来获得随机的财政季度呢,

        dates    numbers
1  2017-01-31       5
2  2017-02-28       1
3  2017-03-30       8

也许这有帮助

library(zoo)
library(tidyverse)
df %>% 
   group_by(qtr = format(as.yearqtr(dates), 'Q%q')) %>% 
   select(-strings) %>%
   sample_n(1) %>% 
   ungroup() %>% 
   sample_n(3) %>% 
   select(-qtr)