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

如何在R中保留日期信息,通过父SKU计算组件用量

父SKU组件拆分并保留日期的解决方案

问题背景

现有两个数据框:

  • df1:记录SKU的使用数量与对应日期,其中部分SKU为父SKU
  • df2:定义父SKU对应的组件SKU,以及单份父SKU所需的组件数量

需要生成新数据框,将父SKU的记录拆分为对应组件的单独行项,同时保留原父SKU记录的日期,最终合并原数据与拆分后的组件数据。

原始数据

# 原始数据定义
df1 <- data.frame(SKU = c("abc", "def", "ghi", "abc", "mno"), 
                  Qty = c(2,1,1,1,2), 
                  Date = c("1-1", "1-1", "1-2", "1-2", "1-2"))

df2 <- data.frame(Parent_SKU = c("def", "def", "mno"), 
                  Component = c("abc","jkl","abc"), 
                  Component_Qty = c(1,3,1))

原有方案的问题

原有代码通过group_by(SKU)汇总父SKU的总数量,直接丢失了日期维度,导致拆分后的组件无法关联到原父SKU的使用日期,最终结果缺失日期信息。

正确解决方案

核心思路:不对父SKU的记录做汇总,直接按每条父SKU记录关联对应的组件,保留原始日期,具体步骤如下:

  1. 筛选df1中的父SKU记录,关联df2获取对应组件信息
  2. 计算组件的实际使用数量:原父SKU数量 × 单份父SKU所需组件数量
  3. 整理列名,匹配原数据的格式
  4. 合并原数据与拆分后的组件数据

实现代码

library(tidyverse)

# 1. 筛选父SKU记录,关联组件信息,保留原始日期
component_df <- df1 %>%
  filter(SKU %in% df2$Parent_SKU) %>%
  left_join(df2, by = c("SKU" = "Parent_SKU")) %>%
  # 2. 计算组件实际使用数量
  mutate(Qty = Qty * Component_Qty,
         # 3. 替换SKU为组件SKU
         SKU = Component) %>%
  # 保留需要的列
  select(SKU, Qty, Date)

# 4. 合并原数据与拆分后的组件数据
df3 <- bind_rows(df1, component_df)

# 查看结果
print(df3)

输出结果

SKU Qty Date
1  abc   2  1-1
2  def   1  1-1
3  ghi   1  1-2
4  abc   1  1-2
5  mno   2  1-2
6  abc   1  1-1
7  jkl   3  1-1
8  abc   2  1-2

完全匹配期望的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:52:40