在 dplyr 日期间隔中过滤

Filter in dplyr interval of dates

我在 R 中有以下模拟数据集:

library(tidyverse)
A = seq(from = as.Date("2021/1/1"),to=as.Date("2022/1/1"), length.out = 252)
length(A)
x = rnorm(252)
d = tibble(A,x);d

看起来像:

# A tibble: 252 × 2
   A               x
   <date>      <dbl>
 1 2021-01-01  0.445
 2 2021-01-02 -0.793
 3 2021-01-03 -0.367
 4 2021-01-05  1.64 
 5 2021-01-06 -1.15 
 6 2021-01-08  0.276
 7 2021-01-09  1.09 
 8 2021-01-11  0.443
 9 2021-01-12 -0.378
10 2021-01-14  0.203
# … with 242 more rows

是一年的 252 次交易 days.Let 说我有一个感兴趣的日期是:

start = as.Date("2021-05-23");start.

我想过滤数据集,结果是从这个开始日期开始的新数据集和接下来的 20 个索引日期不是简单的日子,然后找到新数据集包含的总索引。

例如从开始日期到我有:


d1=d%>%
  dplyr::filter(A>start)%>%
  dplyr::summarise(n())
d1
# A tibble: 1 × 1
  `n()`
  <int>
1    98

但我想从开始日期开始,在接下来的 20 次交易之后 days.How 我可以这样做吗?有帮助吗?

也许 brute-force 尝试:

d %>%
  filter(between(A, start, max(head(sort(A[A > start]), 20))))
# # A tibble: 20 x 2
#    A                x
#    <date>       <dbl>
#  1 2021-05-23 -0.185 
#  2 2021-05-24  0.102 
#  3 2021-05-26  0.429 
#  4 2021-05-27 -1.21  
#  5 2021-05-29  0.260 
#  6 2021-05-30  0.479 
#  7 2021-06-01 -0.623 
#  8 2021-06-02  0.982 
#  9 2021-06-04 -0.0533
# 10 2021-06-05  1.08  
# 11 2021-06-07 -1.96  
# 12 2021-06-08 -0.613 
# 13 2021-06-09 -0.267 
# 14 2021-06-11 -0.284 
# 15 2021-06-12  0.0851
# 16 2021-06-14  0.355 
# 17 2021-06-15 -0.635 
# 18 2021-06-17 -0.606 
# 19 2021-06-18 -0.485 
# 20 2021-06-20  0.255 

如果您有重复的日期,您可能更愿意使用 head(sort(unique(A[A > start])),20),具体取决于“20 个索引日期”的含义。

并且要查找索引的数量,您可以根据需要summarisecount

您可以先按日期排序,筛选大于给定日期的天数,然后提取前 20 条记录。

 d1 = d  %>% 
    arrange(A)  %>% 
    filter(A > start)  %>% 
    head(20)