考虑“缺失”值,处理应输入0的实例

时间:2019-05-29 19:02:43

标签: r dataframe plot

好的,所以我知道这看起来像是一百万个其他相同类型的问题。但是我不认为我曾见过这个确切的问题,所以我在这里哈哈。

假设您有一个按客户,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。如果是这样,是否有一种有效的方法?一如既往的感谢!

1 个答案:

答案 0 :(得分:1)

您可以使用tidyr::completetidyr::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()