Подмножество путем увеличения счета со временем в R - PullRequest
0 голосов
/ 08 января 2019

У меня есть фрейм данных, содержащий количество продаж по продавцу, году и месяцу, который называется sales_by_month:

library(tidyverse)
sales_by_month <- tribble(
~Seller,      ~Year,    ~Month,   ~Sales,
"John Doe",    2018,    1,       82,
"John Doe",    2018,    2,       72,
"John Doe",    2018,    3,       42,
"Sally Jane",  2018,    1,       25,
"Sally Jane",  2018,    2,       77)

Мне нужно поднаборить этот набор данных только теми продавцами, чьи продажи со временем увеличиваются, и я не могу понять, как это сделать.

Результирующий набор данных подмножества должен содержать;

Seller      Year    Month   Sales
Sally Jane  2018    1       25
Sally Jane  2018    2       77

Потому что продажи Салли растут, а продажи Джона снижаются.

Любая помощь будет принята с благодарностью !!

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Как это сделать, зависит от того, как вы хотите определить увеличение с течением времени. Один из способов определить увеличение с течением времени - это увеличение по сравнению с предыдущим месяцем. Мое решение просто смотрит на то, увеличился ли в прошлом месяце рост, но это можно изменить, чтобы взглянуть на него по-другому:

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

  2. Мы фильтруем имена продавцов, которые мы получили в части 1.

Код ниже делает это так же, как и фрейм данных, который мы можем загрузить прямо в R

library(tidyverse)
sales_by_month <- tribble(
~Seller,      ~Year,    ~Month,   ~Sales,
"John Doe",    2018,    1,       82,
"John Doe",    2018,    2,       72,
"John Doe",    2018,    3,       42,
"Sally Jane",  2018,    1,       25,
"Sally Jane",  2018,    2,       77)


increased_from_last_month <- sales_by_month %>% 
  group_by(Seller) %>% 
  arrange(Seller, Year, Month) %>% 
  mutate(change = Sales - lag(Sales, default = 0)) %>% 
  summarise_all(last) %>% 
  filter(change > 0) %>% 
  pull(Seller) %>% 
  unique()


sales_by_month %>% 
  filter(Seller %in% increased_from_last_month)
0 голосов
/ 08 января 2019

Сначала создайте переменную, представляющую разницу в Sales (я называю это dif). Если dif < 0, это означает, что в чьих-то продажах существуют убывающие значения.

library(dplyr)

df %>% arrange(Seller, Year, Month) %>%
  group_by(Seller) %>%
  mutate(dif = c(0, diff(Sales))) %>%
  filter(all(dif >= 0)) %>%
  select(-dif) # drop dif

#   Seller     Year Month Sales
#   <fct>     <int> <int> <int>
# 1 SallyJane  2018     1    25
# 2 SallyJane  2018     2    77

Более кратко:

df %>% group_by(Seller) %>%
  arrange(Seller, Year, Month) %>%
  filter(all(c(0, diff(Sales)) >= 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...