Итак, я знаю, что это похоже на миллион других проблем того же типа. Но я не думаю, что видел кого-то именно с такой проблемой, так что вот я, ха-ха.
Допустим, у вас есть данные о продажах по клиентам, артикулам и дате. Все хорошо в мире. Но что, если бы у вас был этот df, он был огромным (сотни клиентов, а если мы хотели наказать себя дальше, сотни SK каждый, каждую неделю). Затем, после группировки по клиентам, артикулам и неделям, а затем подведения итогов, мы понимаем, что не все артикулы покупаются всеми клиентами каждую неделю. Это все усложняет.
Например, без записи строки для каждой недели по покупателю со значением дохода, равным 0, для каждого не купленного артикула, построение графика с помощью 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 в столбец доходов за каждую неделю, когда клиент не купил артикул. Если это так, есть ли эффективный способ сделать это? Как всегда спасибо!
?tidyr::complete
чтобы добавить 0s. Вам решать, хотите ли вы добавить 0 ко всему фрейму данных или к каждому маленькому фрейму данных при его построении.
Может быть, вы можете использовать ifelse
Спасибо, Грегор! Это именно то, что мне было нужно
Вы можете заполнить пропущенные значения для уровней факторной переменной или непрерывной переменной, которые отсутствуют в наборе данных, с помощью 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()
Кроме того, вы можете сделать это с помощью функции statar
пакета fill_gap
:
df_plot %>%
statar::fill_gap(x, full = TRUE) %>%
replace_na(list(y = 0)) %>%
ggplot(., aes(x, y)) +
geom_point() +
geom_smooth() +
geom_line()
Я должен сказать, представьте, что x выше — номер недели, а y — доход.