如何正确使用功能片

时间:2019-10-13 16:56:35

标签: r dplyr slice

我一直在寻找使用切片的方法,这个示例here似乎最适用。但是,当我尝试此操作时,我的数据无法使用,但是我不确定自己丢失了什么。

数据

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

但是,这不会返回所需的结果,该结果将是my_data自上次日期(“ 2019-09-21”在end_of_qtr日期“ 2019-09-30”之前)开始的前3行。

请问有人可以告诉我使用slice的正确方法吗?

0 个答案:

没有答案