好的,所以我知道这看起来像是一百万个其他相同类型的问题。但是我不认为我曾见过这个确切的问题,所以我在这里哈哈。
假设您有一个按客户,sku和日期销售的数据框。世界上一切都很好。但是,如果您拥有这个df,那么它会是巨大的(数百名客户,如果我们想进一步惩罚自己,每周会有数百次欺骗)。然后,在按客户,SKU和周进行分组,然后进行汇总后,我们意识到并非每周所有客户都会购买所有的功能。这使事情变得复杂。
例如,如果没有每个客户每周的行条目,每个未购买的sku的收益值为0,则使用geom_line和geom_smooth进行绘制变得不准确。这些线沿其轨迹继续,而不是下降到零。
我现在可能只是非常愚蠢,但是如何在每个星期没有任何给定客户购买sku的情况下,将所有收入为0的条目介绍给我,以便获得所需的图表?还是有一种完全不同的方式来处理这种事情?
# 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()
我不知道图中是否有简单的方法可以解决这个问题?否则,我需要在每周未由客户购买的sku的收入列中添加0。如果是这样,是否有一种有效的方法?一如既往的感谢!
答案 0 :(得分:1)
您可以使用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()