在 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 个索引日期”的含义。
并且要查找索引的数量,您可以根据需要summarise
或count
。
您可以先按日期排序,筛选大于给定日期的天数,然后提取前 20 条记录。
d1 = d %>%
arrange(A) %>%
filter(A > start) %>%
head(20)
我在 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 个索引日期”的含义。
并且要查找索引的数量,您可以根据需要summarise
或count
。
您可以先按日期排序,筛选大于给定日期的天数,然后提取前 20 条记录。
d1 = d %>%
arrange(A) %>%
filter(A > start) %>%
head(20)