Как включить агрегатную функцию внутри фильтра dplyr в R - PullRequest
0 голосов
/ 23 января 2020

Мне нужно узнать общее количество моделей, которые были проданы только один раз за месяц.

Пример DF:

> df <- data.frame(sale_date = c('2019-01-02','2019-01-06','2019-01-20','2019-01-24','2019-02- 
01','2019-02-11','2019-02-21','2019-03-13','2019-03-10','2019-03-19'),
+                  model = c('A4','Vxi','Vxi','A6','Xing','Xing','Lxi','Lxi','Zxi','Zxi'))
> df
    sale_date model
1  2019-01-02    A4
2  2019-01-06   Vxi
3  2019-01-20   Vxi
4  2019-01-24    A6
5  2019-02-01  Xing
6  2019-02-11  Xing
7  2019-02-21   Lxi
8  2019-03-13   Lxi
9  2019-03-10   Zxi
10 2019-03-19   Zxi

Мой результат должен быть: 4, потому что в январе и «A4», и «A6» продавались только один раз, так что это 2 для января, затем в феврале «Lxi» был продан только один раз, поэтому 3 за январь и февраль, а в марте также «Lxi» был продан только один раз, поэтому общее количество моделей, которые продавались только раз в месяц, составляет 4.

, пробовал с кодом ниже, но кажется длинным:

> step1 <- df %>% group_by(month(sale_date, label = 1),model) %>% summarise(count = n())
> step1
# A tibble: 7 x 3
# Groups:   month(sale_date, label = 1) [3]
  `month(sale_date, label = 1)` model count
  <ord>                         <fct> <int>
1 Jan                           A4        1
2 Jan                           A6        1
3 Jan                           Vxi       2
4 Feb                           Lxi       1
5 Feb                           Xing      2
6 Mar                           Lxi       1
7 Mar                           Zxi       2
> sum(step1$count == 1)
[1] 4
> 

Может кто-нибудь сообщить мне, если есть более простой код для получения результата

1 Ответ

4 голосов
/ 23 января 2020

Вы можете получить месяц-год от даты, создать подсчет количества моделей, проданных в каждом месяце, и подсчитать количество моделей, проданных только один раз.

library(dplyr)

df %>%
  mutate(sale_month = format(as.Date(sale_date), "%Y-%m")) %>%
  count(sale_month, model) %>%
  summarise(ans = sum(n == 1))

#    ans
#  <int>
#1     4

В базе R мы можем подсчитать количество моделей, проданных с table, и подсчитать количество случаев, равное 1.

sum(table(transform(df,sale_month = format(as.Date(sale_date), "%Y-%m"))[-1]) ==1)
#[1] 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...