You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言实操:为销售数据中2021年缺失的邮编观测记录创建补全行

解决方案

核心逻辑是先用全量邮编、需要匹配的产品、待补全年份三个维度生成全量基准表,再和原有销售数据关联,缺失的供应状态直接填充为NO即可。
假设你的全量邮编数据集命名为zip_full,仅含ZIP列存储所有邮编;原始销售数据集命名为sales_raw,包含你提到的四个字段。

方法1:tidyverse 实现(逻辑直观,适合入门用户)

首先加载依赖包:
library(tidyverse)

操作步骤:

  • 生成2021年全量邮编+所有产品的匹配基准
full_base <- expand_grid(
  ZIP = zip_full$ZIP,
  # 如果仅需要补全TOY品类,把unique(...)替换为"TOY"即可
  PRODUCT = unique(sales_raw$PRODUCT),
  YEAR = 2021
)
  • 关联原有2021年销售数据,补全缺失值
# 提取原有2021年销售记录
sales_2021 <- sales_raw %>% filter(YEAR == 2021)

# 左连接补全所有邮编的记录,缺失的供应状态填NO
sales_2021_full <- full_base %>%
  left_join(sales_2021, by = c("ZIP", "PRODUCT", "YEAR")) %>%
  mutate(AVAILABILITY = replace_na(AVAILABILITY, "NO"))
  • 合并原有2020年数据和补全后的2021年数据,得到最终数据集
sales_final <- sales_raw %>%
  filter(YEAR != 2021) %>%
  bind_rows(sales_2021_full)

方法2:基础R实现(无需安装额外依赖包)

# 生成全量匹配基准
all_zip <- zip_full$ZIP
all_product <- unique(sales_raw$PRODUCT)
full_base <- expand.grid(ZIP = all_zip, PRODUCT = all_product, YEAR = 2021, stringsAsFactors = FALSE)

# 关联原有2021年销售数据
sales_2021 <- sales_raw[sales_raw$YEAR == 2021, ]
merge_2021 <- merge(full_base, sales_2021, by = c("ZIP", "PRODUCT", "YEAR"), all.x = TRUE)

# 填充缺失的供应状态
merge_2021$AVAILABILITY[is.na(merge_2021$AVAILABILITY)] <- "NO"

# 合并得到最终数据集
sales_final <- rbind(sales_raw[sales_raw$YEAR != 2021, ], merge_2021)

注意:上述代码默认会给数据集中所有产品补全全量邮编的2021年记录,如果你只需要补全TOY这一个产品的记录,把代码里的unique(sales_raw$PRODUCT)直接替换为"TOY"即可。

内容的提问来源于stack exchange,提问作者Anita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:45:03