Подсчет значений на основе диапазона данных в R - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть данные, которые я хочу агрегировать на основе диапазона данных.

have=data.frame('foo' = c(123,123,234534,2541,23,2541,2541,234534,234534),bar=as.Date(c('2020-01-13','2019-12-13','2020-02-14','2020-01-10','2020-01-03','2019-12-18','2019-11-06','2019-11-14','2019-10-20')))
     foo        bar
1    123 2020-01-13
2    123 2019-12-13
3 234534 2020-02-14
4   2541 2020-01-10
5     23 2020-01-03
6   2541 2019-12-18
7   2541 2019-11-06
8 234534 2019-11-14
9 234534 2019-10-20

Я хочу сосчитать столбец foo на основе интервала, который является максимальным для различных значений foo и месяц назад.

want=data.frame('foo' = c(123,234534,2541,23,2541,234534),bar=as.Date(c('2020-01-13','2020-02-14','2020-01-10','2020-01-03','2019-11-06','2019-11-14')),'count'=c(2,1,2,1,1,2))
     foo        bar count
1    123 2020-01-13     2
2 234534 2020-02-14     1
3   2541 2020-01-10     2
4     23 2020-01-03     1
5   2541 2019-11-06     1
6 234534 2019-11-14     2

Я использую следующий код, но не знаю, как использовать диапазон в функции sumrize ().

have %>% 
  mutate(bar= as.Date(bar)) %>% 
  group_by(foo) %>% 
  summarise(min_date=(max(bar) %m-% months(1)),max_date=max(bar),count = n())

Вывод следующий, где 234534 считается как 3 вместо 1, а затем как 2, как видно на кадре данных want .

     foo min_date   max_date   count
   <dbl> <date>     <date>     <int>
1     23 2019-12-03 2020-01-03     1
2    123 2019-12-13 2020-01-13     2
3   2541 2019-12-10 2020-01-10     3
4 234534 2020-01-14 2020-02-14     3
...