Фильтрация данных путем прокручивания дат или непрерывной фильтрации дат - PullRequest
0 голосов
/ 21 ноября 2018

Я фильтрую фрейм данных по датам ... теперь, как получить данные с такими же датами в прошлом месяце?

df<-data.frame(
  Date=sample(seq(as.Date('2018-10-25'), as.Date('2018-11-20'), by = "day"), 100,replace = T),
  category1=sample(letters[1:6],100,replace = T),
  count=sample(1:1000,100,replace = T)
)

df%>%filter(Date < Sys.Date()-1 & Date >= Sys.Date()-8) %>%group_by(Date,category1)%>%summarise(Total=sum(count))


Output:
# A tibble: 19 x 3
# Groups:   Date [?]
   Date       category1 Total
   <date>     <fct>     <int>
 1 2018-11-13 a           231
 2 2018-11-14 e           763
 3 2018-11-14 f            50
 4 2018-11-15 a           643
 5 2018-11-15 e           745
 6 2018-11-15 f           931
 7 2018-11-16 b           712
 8 2018-11-16 e           416
 9 2018-11-16 f           914
10 2018-11-17 a           270
11 2018-11-17 b           837
12 2018-11-17 d          1539
13 2018-11-17 e           251
14 2018-11-18 a          1181
15 2018-11-18 f           966
16 2018-11-19 a           673
17 2018-11-19 b           960
18 2018-11-19 d           768
19 2018-11-19 e           932

выше выходных данных с 13 по 19 ноября, так какполучить данные в те же даты октября месяца?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Будьте осторожны при использовании «месяцев», так как это вычитает количество из месяца в дате.Это вызовет проблемы, если новое значение не имеет столько дней в месяце;например, вычитая 1 из 2018-03-31

> x <- ymd(20180331)
> x
[1] "2018-03-31"
> x - months(1)  # the 31th of February does not exist
[1] NA
0 голосов
/ 21 ноября 2018

Если я вас правильно понял, вы можете вычесть 1 месяц из текущего условия фильтра.

library(dplyr)
library(lubridate)

df %>%
  filter(Date < (Sys.Date() - 1 - months(1)) & 
         Date >= (Sys.Date() - 8 - months(1))) %>%
  group_by(Date,category1) %>%
  summarise(Total = sum(count))

Это даст вам строки на те же даты в октябре.

...