如何在R中保留日期信息,通过父SKU计算组件用量
父SKU组件拆分并保留日期的解决方案
问题背景
现有两个数据框:
df1:记录SKU的使用数量与对应日期,其中部分SKU为父SKUdf2:定义父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记录关联对应的组件,保留原始日期,具体步骤如下:
- 筛选df1中的父SKU记录,关联df2获取对应组件信息
- 计算组件的实际使用数量:原父SKU数量 × 单份父SKU所需组件数量
- 整理列名,匹配原数据的格式
- 合并原数据与拆分后的组件数据
实现代码
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
相关产品推荐
相关产品推荐

