Как изменить критерии ранжирования, чтобы указать дату окончания - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть этот код

library(dplyr)
library(tidyr)
top5vio <- inc_ag %>%
  mutate(Zone=ifelse(ZoneID=="Outside ZoneZ", 1, 0)) %>%
  group_by(District, Period, Zone) %>%
  mutate(grp=factor(+(min_rank(desc(violentIncidents))<=5) + Zone,
                    labels=c("Top 5", "Rest of Zones", "Outside Zones"),
                    levels=c(1,0,2))) %>%
  group_by(District, Period, grp) %>%
  summarise(n=sum(violentIncidents)) %>%
  pivot_wider(names_from=grp, values_from=n, values_fill=list(n=0))

Это делает переменную группировки (grp) равной 1, если переменная violentIncidents находится в верхних 5 и 0 в противном случае. Затем он объединяет это с теми, которые имеют ZonedID = "Внешние зоны", чтобы создать 3 группы.

Однако, что если я захочу установить sh 5 лучших рангов на определенную дату (скажем, 6/20 / 2019), и что выбранные идентификаторы зоны должны быть топ-5 по состоянию на 20.06.2009? Какой будет соответствующий синтаксис?

Спасибо.

Код преобразует следующие данные:

obs District    ZoneID  Period  violentIncidents
1   Northwestern    Northern: 53A   2019-02-06 - 2019-03-06 4
2   Northwestern    Northern: 53B   2019-02-06 - 2019-03-06 0
3   Northwestern    Northwestern: 61A   2019-02-06 - 2019-03-06 88
4   Northwestern    Northwestern: 61B   2019-02-06 - 2019-03-06 44
5   Northwestern    Northwestern: 61D   2019-02-06 - 2019-03-06 212
6   Northwestern    Northwestern: 62A   2019-02-06 - 2019-03-06 38
7   Northwestern    Northwestern: 62B   2019-02-06 - 2019-03-06 18
8   Northwestern    Northwestern: 62C   2019-02-06 - 2019-03-06 65
9   Northwestern    Northwestern: 62D   2019-02-06 - 2019-03-06 4
10  Northwestern    Northwestern: 63A   2019-02-06 - 2019-03-06 107
11  Northwestern    Northwestern: 63B   2019-02-06 - 2019-03-06 19
12  Northwestern    Northwestern: 63C   2019-02-06 - 2019-03-06 56
13  Northwestern    Northwestern: 63D   2019-02-06 - 2019-03-06 165
14  Northwestern    Northwestern: DATA  2019-02-06 - 2019-03-06 28
15  Northwestern    Northwestern: DATB  2019-02-06 - 2019-03-06 26
16  Northwestern    Northwestern: DATC  2019-02-06 - 2019-03-06 114
17  Northwestern    Outside Zones 2019-02-06 - 2019-03-06   1501
18  Southern    Outside Zones 2019-02-06 - 2019-03-06   2062
19  Southwestern Outside Zones  2019-02-06 - 2019-03-06 1351

В это:

  District     Period                  `Top 5` `Rest of Zones` `Outside Zones`
  <chr>        <chr>                     <int>           <int>           <int>
1 Northwestern 2019-02-06 - 2019-03-06     686             302            1501
2 Southern     2019-02-06 - 2019-03-06       0               0            2062
3 Southwestern 2019-02-06 - 2019-03-06       0               0            1351

1 Ответ

2 голосов
/ 07 апреля 2020

Я подозреваю, что этот подход с lubridate может работать для вас.

library(dplyr)
library(tidyr)
library(lubridate)
inc_ag %>%
  mutate(Zone=ifelse(ZoneID=="Outside Zones", 1, 0)) %>%
  mutate(PeriodSplit = Period) %>% 
  separate(col = PeriodSplit,into=c("periodStart","periodEnd"),sep = " - ") %>%
  filter(periodEnd <= ymd("2019-06-20")) %>%
  group_by(District, Period, Zone) %>%
  mutate(grp=factor(+(min_rank(desc(violentIncidents))<=5) + Zone,
                    labels=c("Top 5", "Rest of Zones", "Outside Zones"),
                    levels=c(1,0,2))) %>%
  ungroup %>%
  select(District,ZoneID,grp) %>%
  right_join(inc_ag,by=c("District","ZoneID")) %>%
  group_by(District, Period, grp) %>%
  summarise(n=sum(violentIncidents)) %>%
  pivot_wider(names_from=grp, values_from=n, values_fill=list(n=0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...