Я искал использовать слайс, и этот пример здесь показался наиболее подходящим. Тем не менее, когда я попробовал это для моих данных, не работало, но я не уверен, что мне не хватает.
Данные
library(tidyverse)
library(lubridate)
# Data
my_df <- structure(list(Date = structure(c(17896, 17986, 18077, 18160), class = "Date"),
t_period = c("Quarter", "Quarter", "Quarter", "Quarter"),
A = c(-10.2, 9.4, 3.2, 0.7), B = c(-13.6, 13.4, 6.2, 2.8)), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L), groups = structure(list(
Date = structure(c(17896, 17986, 18077, 18160), class = "Date"),
.rows = list(1L, 2L, 3L, 4L)), row.names = c(NA, -4L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE))
# my_df
# A tibble: 4 x 4
# Groups: Date [4]
# Date t_period A B
# <date> <chr> <dbl> <dbl>
#1 2018-12-31 Quarter -10.2 -13.6
#2 2019-03-31 Quarter 9.4 13.4
#3 2019-06-30 Quarter 3.2 6.2
#4 2019-09-21 Quarter 0.7 2.8
Что я хочунужно отфильтровать дату последнего квартала, если она находится до конца квартала.
# Get end of existing quarter
end_of_qtr <- ceiling_date(as.Date("2019-09-28"), "quarter") - 1
# Filter out last row if Date < quarter end date
filtered_df <- my_df %>%
group_by(t_period) %>%
arrange(Date) %>%
slice(ifelse( n() < end_of_qtr, 1:(n()-1), n() ))
Однако это не возвращает желаемый результат, который будет первым 3 строкой my_data после последней даты («2019-09-21» предшествует дате окончания_точки «2019-09-30»)
Может кто-нибудь сказать мне правильный способ использования слайса, чтобы сделать это, пожалуйста?