r - 考虑“缺失”值,处理应输入 0 的实例
问题描述
好的,所以我知道这看起来像一百万个相同类型的其他问题。但我不认为我见过一个有这个确切问题的人,所以我在这里哈哈。
假设您有一个按客户、sku 和日期划分的销售数据框。世界上一切都很好。但是,如果你有这个 df,它是巨大的(数百个客户,如果我们想进一步惩罚自己,每个星期都有数百个 sku)。然后,在按客户、sku 和周分组后,再进行总结,我们意识到并非所有客户每周都购买所有 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。如果是这样的话,有没有一种有效的方法来做到这一点?一如既往的感谢!
解决方案
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()
推荐阅读
- javascript - GoogleScript - 将不同长度的数组转换为相同长度的数组
- amazon-web-services - 在 AWS API Gateway 中启用 CORS 时出错
- linux - 了解顺序和随机读取的生物潜伏期统计数据
- ibm-cloud - 如何让 Watson Assistant 正确响应
- python - Python包:如何测试编译器是否支持标志?
- javascript - Angular 12 升级错误:您可能需要适当的加载程序来处理此文件类型,目前没有配置加载程序来处理此文件
- wordpress - 自动升级到 5.8 后看到错误和站点不可用
- r - ggplot2 在自定义轴转换后删除数字
- javascript - 使 div 内的块对后面的图像透明
- directory - 清除 Google Drive 文件夹