У меня есть файл (примерно 9K записей), который я хочу сначала агрегировать на основе группы, а затем по датам, которые находятся в пределах семи дней друг от друга. Однако я не понимаю, почему результаты выглядят так, как они. Я понимаю, что есть и другие способы добиться тех же результатов в этом конкретном примере, но это будет намного сложнее, и есть другие причины, по которым я заинтересован в использовании tibbletime. Вот воспроизводимый пример:
library(tidyverse)
library(lubridate)
library(tibbletime) #devtools::install_github("business-science/tibbletime")
TEST_ROLL <- as_tibble(list(
CITY_ID = c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "2",
"2", "2", "2"),
CAFE_ID = c("1001", "1001", "1001", "1001", "2002", "2002", "2002", "2002",
"3003", "3003", "3003", "3003", "4004", "4004", "4005", "4005"),
HEALTH_REPORT_ID = c("1425", "1532", "1666", "1989", "2166", "2457", "2776",
"2999", "3409", "3497", "3595", "3786", "4105", "4511", "4567", "4580"),
REPORT_SUBMIT_DATE = ymd( c( "2013-05-26", "2013-05-27", "2013-05-31",
"2013-05-31", "2016-05-26", "2016-05-27", "2016-05-31", "2016-05-31", "2018-
05-26", "2018-05-27", "2018-05-31", "2018-05-31", "2017-01-01", "2017-01-
05", "2017-02-04", "2017-02-10"))))
Что я хочу сделать, так это, начиная с первого отчета для каждого кафе, считать отчеты о состоянии здоровья, отправленные в течение семи дней друг от друга, только как один отчет, чтобы их не пересчитать.
Сначала я попытался использовать «7 дней» в качестве периода:
TEST_ROLL %>%
group_by(CAFE_ID) %>%
as_tbl_time(REPORT_SUBMIT_DATE) %>%
mutate(ROLL_DATE = collapse_index(REPORT_SUBMIT_DATE, "7 day"))
# A time tibble: 16 x 5
# Index: REPORT_SUBMIT_DATE
# Groups: CAFE_ID [5]
CITY_ID CAFE_ID HEALTH_REPORT_ID REPORT_SUBMIT_DATE ROLL_DATE
<chr> <chr> <chr> <date> <date>
1 1 1001 1425 2013-05-26 2013-05-27
2 1 1001 1532 2013-05-27 2013-05-27
3 1 1001 1666 2013-05-31 2013-05-31
4 1 1001 1989 2013-05-31 2013-05-31
5 1 2002 2166 2016-05-26 2016-05-27
6 1 2002 2457 2016-05-27 2016-05-27
7 1 2002 2776 2016-05-31 2016-05-31
8 1 2002 2999 2016-05-31 2016-05-31
9 1 3003 3409 2018-05-26 2018-05-27
10 1 3003 3497 2018-05-27 2018-05-27
11 1 3003 3595 2018-05-31 2018-05-31
12 1 3003 3786 2018-05-31 2018-05-31
13 2 4004 4105 2017-01-01 2017-01-05
14 2 4004 4511 2017-01-05 2017-01-05
15 2 4005 4567 2017-02-04 2017-02-04
16 2 4005 4580 2017-02-10 2017-02-10
Это не то, чего я хочу. Если бы это сработало, все четыре отчета по кафе 1001 имели бы одинаковую дату обновления, потому что все они в пределах 7 дней. Так почему же в столбце результатов разделены на две даты?
Просто поигравшись с этим, я попытался использовать «еженедельно» вместо «7 дней», а затем получил такой результат:
TEST_ROLL %>%
group_by(CAFE_ID) %>%
as_tbl_time(REPORT_SUBMIT_DATE) %>%
mutate(ROLL_DATE = collapse_index(REPORT_SUBMIT_DATE, "weekly"))
# A time tibble: 16 x 5
# Index: REPORT_SUBMIT_DATE
# Groups: CAFE_ID [5]
CITY_ID CAFE_ID HEALTH_REPORT_ID REPORT_SUBMIT_DATE ROLL_DATE
<chr> <chr> <chr> <date> <date>
1 1 1001 1425 2013-05-26 2013-05-31
2 1 1001 1532 2013-05-27 2013-05-31
3 1 1001 1666 2013-05-31 2013-05-31
4 1 1001 1989 2013-05-31 2013-05-31
5 1 2002 2166 2016-05-26 2016-05-27
6 1 2002 2457 2016-05-27 2016-05-27
7 1 2002 2776 2016-05-31 2016-05-31
8 1 2002 2999 2016-05-31 2016-05-31
9 1 3003 3409 2018-05-26 2018-05-26
10 1 3003 3497 2018-05-27 2018-05-31
11 1 3003 3595 2018-05-31 2018-05-31
12 1 3003 3786 2018-05-31 2018-05-31
13 2 4004 4105 2017-01-01 2017-01-05
14 2 4004 4511 2017-01-05 2017-01-05
15 2 4005 4567 2017-02-04 2017-02-04
16 2 4005 4580 2017-02-10 2017-02-10
Кафе 1001 именно то, что я хотел, но кафе 2002 и 3003 имеют одинаковые даты (разный год), а результат разный.
И кафе 4004 комбинируется как я хочу, но для кафе 4005 всего 6 дней между ними, так что их тоже надо было комбинировать. (Я подытожу/подсчитаю их позже)
Любые идеи, почему это может происходить? Спасибо!!
collapse_index(REPORT_SUBMIT_DATE, "weekly")
сворачивает даты, относящиеся к той же неделе, которая начинается в воскресенье. ИМХО, однако, будет намного проще просто принять поведениеcollapse_index
по умолчанию, чем то, чего вы пытаетесь достичь. - person hpesoj626   schedule 06.04.2018