Как правильно использовать функцию слайс - PullRequest
2 голосов
/ 13 октября 2019

Я искал использовать слайс, и этот пример здесь показался наиболее подходящим. Тем не менее, когда я попробовал это для моих данных, не работало, но я не уверен, что мне не хватает.

Данные

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»)

Может кто-нибудь сказать мне правильный способ использования слайса, чтобы сделать это, пожалуйста?

...