Учет «пропущенных» значений, работа со случаями, когда нужно вводить нули - PullRequest
0 голосов
/ 29 мая 2019

Хорошо, я знаю, это похоже на миллион других проблем того же типа. Но я не думаю, что видел такой же вопрос, так что я хаха.

Допустим, у вас есть данные о продажах по клиенту, артикулу и дате. В мире все хорошо. Но что, если у вас был этот df, он был огромным (сотни клиентов, и если мы хотели наказать себя дальше, сотни скусов каждый, каждую неделю). Затем, после группировки по клиенту, номеру и неделе, а затем подведения итогов, мы понимаем, что не все скусы покупают все клиенты каждую неделю. Это усложняет вещи.

Например, без ввода строки для каждой недели клиентом со значением дохода 0 для каждого sku, которое не было куплено, построение графиков с помощью geom_line и geom_smooth становится неточным. линии продолжат движение по траектории, вместо того, чтобы опуститься до нуля.

Может быть, я сейчас просто очень глуп, но как мне вводить все эти записи с нулевым доходом каждый раз, когда есть неделя, когда какой-либо покупатель не покупает пометку, чтобы получить нужные мне графики? Или есть совершенно другой способ борьбы с подобными вещами?

# Extremely simplified
# Plot from DF WO zeros

df_plot<- data.frame(x=c(1,2,3,4,5,10), y=c(1,2,3,4,5,10))
ggplot(df_plot,aes(x,y))+
  geom_point()+
  geom_smooth()+
  geom_line()

# Theoretical plot where we have zeros where no sales were made

df_plot2<- data.frame(x=c(1,2,3,4,5,6,7,8,9,10), y=c(1,2,3,4,5,0,0,0,0,10))
ggplot(df_plot2,aes(x,y))+
  geom_point()+
  geom_smooth()+
  geom_line()

Я не знаю, есть ли простой способ разобраться с этим на графике? В противном случае мне нужно добавлять 0 в столбце доходов за каждую неделю, когда заказчик покупал купюру. Если это так, есть ли эффективный способ сделать это? Спасибо как всегда!

1 Ответ

1 голос
/ 29 мая 2019

Вы можете заполнить пропущенные значения уровней факторной или непрерывной переменной, которых нет в наборе данных, с помощью tidyr::complete и tidyr::full_seq.

В вашем случае, я думаю, вы хотите:

# Load required packages.
library(ggplot2)
library(tidyr)

# Create data frame with 0 values omitted.
df_plot<- data.frame(x=c(1,2,3,4,5,10), y=c(1,2,3,4,5,10))
ggplot(df_plot,aes(x,y))+
  geom_point()+
  geom_smooth()+
  geom_line()

# Fill gap in continuous variable with 0's and plot. 
df_plot %>% 
  complete(x = full_seq(x, 1), fill = list(y = 0)) %>% 
  ggplot(., aes(x, y)) +
  geom_point() +
  geom_smooth() +
  geom_line()

Кроме того, можно проверить функцию fill_gap пакета statar:

df_plot %>% 
statar::fill_gap(x, full = TRUE) %>% 
  replace_na(list(y = 0)) %>% 
  ggplot(., aes(x, y)) +
  geom_point() +
  geom_smooth() +
  geom_line()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...