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

如何上移数据消除NA值,合并相同UPC、门店、周次的冗余数据?

解决方案

你已经完成了数据的长宽转换,只需要在现有代码的基础上增加分组填充、去重逻辑即可解决同组NA和冗余问题,最终也可以直接输出你需要的字段结构:

你可以在你现有代码末尾补充以下代码:

library(tidyverse)
# 你的原有代码保持不变
RD <- read.csv("Raw Soft Drinks Sales Data.csv")
U  <- read.csv("UPC Soft Drinks.csv") %>%
  mutate(UPC   = as.factor(UPC),
         BRAND = as.factor(BRAND),
         CLASS = as.factor(CLASS))
RDX <- RD %>%
  filter(UPC != "Total") %>%
  select (-c(Total.Q1,Total.Q2,Total.Q3,Total.Q4))


RDXL <- RDX %>%
  pivot_longer(
    cols = starts_with("Week"),
    names_to = "WEEK", 
    names_prefix = "Week",
    values_to = "UNITS",
    values_drop_na = TRUE)

RDW <- pivot_wider(RDXL, names_from = "ITEM", values_from = "UNITS")%>%
  select(-TOTAL)

# 新增处理NA与冗余的代码
RDW_final <- RDW %>%
  # 按你确认的唯一键分组:门店、UPC、周度三个字段完全一致的行归为一组
  group_by(STORE, UPC, WEEK) %>%
  # 同组内所有字段的NA会被上下存在的非NA值补全
  fill(everything(), .direction = "downup") %>%
  # 去除分组后重复的冗余行,每组仅保留1行完整数据
  distinct() %>%
  ungroup() %>%
  # 调整列顺序和命名,完全匹配你需要的字段
  select(Store = STORE, UPC, Dollars, Units, Feat, Deal, Week = WEEK)

逻辑说明

  • 因为你确认相同Store、UPC、Week的行信息是互补的,所以按这三个字段分组后,fill()函数会自动把同组内的NA值替换为同组存在的非NA值
  • distinct()直接去掉重复的冗余行,得到每行都是唯一完整的数据集
  • 最后用select()直接调整为你需要的列名和顺序,不需要额外再做转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:15:05