使用 slider_index() 每个索引值有多个观测值时如何避免数据重复?
How to avoid data duplicates when using slider_index() with multiple observations per index value?
我正在使用 slider::slider_index()
在数据集上设置滚动时间 windows。这个想法是将一个函数应用于属于时间 window.
的所有点
这是一个可重现的示例,用于获取属于连续 2 天的所有个体(1 个个体 = 数据框的 1 行)。
# packages
library(dplyr)
library(lubridate)
library(slider)
# dummy data
company <- tibble(
sales = c(2, 3, 1, 8, 4, 6, 2),
index = as.Date("2019-08-29") + c(0, 0, 1, 1, 1, 5, 6),
)
# what I have done so far
roll_index <- slide_index(company, company$index, ~ .x, .before = lubridate::days(1))
给出:
> roll_index
[[1]]
# A tibble: 2 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
[[2]]
# A tibble: 2 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
[[3]]
# A tibble: 5 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
3 1 2019-08-30
4 8 2019-08-30
5 4 2019-08-30
[[4]]
# A tibble: 5 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
3 1 2019-08-30
4 8 2019-08-30
5 4 2019-08-30
[[5]]
# A tibble: 5 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
3 1 2019-08-30
4 8 2019-08-30
5 4 2019-08-30
[[6]]
# A tibble: 1 x 2
sales index
<dbl> <date>
1 6 2019-09-03
[[7]]
# A tibble: 2 x 2
sales index
<dbl> <date>
1 6 2019-09-03
2 2 2019-09-04
到目前为止一切顺利。问题是它并不完全符合我的预期。正如您所看到的,一些数据是重复的:roll_index[[3]]
、roll_index[[4]]
和 roll_index[[5]]
是相同的。
我的理解是 slider::slide_index()
一个接一个地出现,即使多个个体属于相同的索引值。
我如何避免这些数据重复,因为当我使用我的实际数据时,它们往往会增加相当多的输出大小?
您可以使用构成 backbone 幻灯片函数的 slider::hop()
函数集。在您的情况下, hop_index()
可以解决问题。我们只需要手动将 .stop
设置为前一天的 company$index
和 .start
的唯一值。
stops <- unique(company$index)
starts <- stops - lubridate::days(1)
hop_index(
.x = company,
.i = company$index,
.starts = starts,
.stops = stops,
.f = ~.x
)
#> [[1]]
#> # A tibble: 2 × 2
#> sales index
#> <dbl> <date>
#> 1 2 2019-08-29
#> 2 3 2019-08-29
#>
#> [[2]]
#> # A tibble: 5 × 2
#> sales index
#> <dbl> <date>
#> 1 2 2019-08-29
#> 2 3 2019-08-29
#> 3 1 2019-08-30
#> 4 8 2019-08-30
#> 5 4 2019-08-30
#>
#> [[3]]
#> # A tibble: 1 × 2
#> sales index
#> <dbl> <date>
#> 1 6 2019-09-03
#>
#> [[4]]
#> # A tibble: 2 × 2
#> sales index
#> <dbl> <date>
#> 1 6 2019-09-03
#> 2 2 2019-09-04
我正在使用 slider::slider_index()
在数据集上设置滚动时间 windows。这个想法是将一个函数应用于属于时间 window.
这是一个可重现的示例,用于获取属于连续 2 天的所有个体(1 个个体 = 数据框的 1 行)。
# packages
library(dplyr)
library(lubridate)
library(slider)
# dummy data
company <- tibble(
sales = c(2, 3, 1, 8, 4, 6, 2),
index = as.Date("2019-08-29") + c(0, 0, 1, 1, 1, 5, 6),
)
# what I have done so far
roll_index <- slide_index(company, company$index, ~ .x, .before = lubridate::days(1))
给出:
> roll_index
[[1]]
# A tibble: 2 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
[[2]]
# A tibble: 2 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
[[3]]
# A tibble: 5 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
3 1 2019-08-30
4 8 2019-08-30
5 4 2019-08-30
[[4]]
# A tibble: 5 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
3 1 2019-08-30
4 8 2019-08-30
5 4 2019-08-30
[[5]]
# A tibble: 5 x 2
sales index
<dbl> <date>
1 2 2019-08-29
2 3 2019-08-29
3 1 2019-08-30
4 8 2019-08-30
5 4 2019-08-30
[[6]]
# A tibble: 1 x 2
sales index
<dbl> <date>
1 6 2019-09-03
[[7]]
# A tibble: 2 x 2
sales index
<dbl> <date>
1 6 2019-09-03
2 2 2019-09-04
到目前为止一切顺利。问题是它并不完全符合我的预期。正如您所看到的,一些数据是重复的:roll_index[[3]]
、roll_index[[4]]
和 roll_index[[5]]
是相同的。
我的理解是 slider::slide_index()
一个接一个地出现,即使多个个体属于相同的索引值。
我如何避免这些数据重复,因为当我使用我的实际数据时,它们往往会增加相当多的输出大小?
您可以使用构成 backbone 幻灯片函数的 slider::hop()
函数集。在您的情况下, hop_index()
可以解决问题。我们只需要手动将 .stop
设置为前一天的 company$index
和 .start
的唯一值。
stops <- unique(company$index)
starts <- stops - lubridate::days(1)
hop_index(
.x = company,
.i = company$index,
.starts = starts,
.stops = stops,
.f = ~.x
)
#> [[1]]
#> # A tibble: 2 × 2
#> sales index
#> <dbl> <date>
#> 1 2 2019-08-29
#> 2 3 2019-08-29
#>
#> [[2]]
#> # A tibble: 5 × 2
#> sales index
#> <dbl> <date>
#> 1 2 2019-08-29
#> 2 3 2019-08-29
#> 3 1 2019-08-30
#> 4 8 2019-08-30
#> 5 4 2019-08-30
#>
#> [[3]]
#> # A tibble: 1 × 2
#> sales index
#> <dbl> <date>
#> 1 6 2019-09-03
#>
#> [[4]]
#> # A tibble: 2 × 2
#> sales index
#> <dbl> <date>
#> 1 6 2019-09-03
#> 2 2 2019-09-04