2017-02-04 2 views
0

Я работаю над анализом потребности в сырьевых материалах в моей компании, и подход, который я принимаю, заключается в использовании записей о продажах готовой продукции в сочетании со спецификацией материалов для каждого готового товара. Проблема в том, что каждый готовый продукт состоит из нескольких компонентов, а многие готовые продукты имеют общие компоненты. Я стараюсь сохранить все индивидуальные показатели продаж для каждого готового товара и использовать UnitsSold для умножения с единицей для каждого компонента, чтобы получить спрос на сырье. Вот код для образцов наборов данных:dplyr объединить два набора данных для продаж готовой продукции и спецификации материалов

fg_Sales <- data_frame(FG_PartNumber=rep(c("A","B","C"),2), 
         Order_Date=seq.Date(as.Date("2011-1-1"),as.Date("2012-1-10"),length.out = 6), 
         FG_UnitsSold=c(100,200,300,400,500,600)) 

bill_materials <- data_frame(FG_PartNumber=rep(c("A","B","C"),4), 
          Components=c("C1","C2","C3","C4","C5","C6","C7","C7","C7","C8","C8","C9"), 
          Qty=rnorm(3,1,n = 12))%>% 
          arrange(FG_PartNumber) 

я знаком с left_join в dplyr, но это, кажется, не работает, потому что она всегда дает мне с первым компонентом для каждого готового продукта.

Может ли кто-нибудь помочь с этим? Спасибо.

ответ

0

Может быть, я не понимание вопроса, но если вы группировать два кадра данных с помощью в FG_PartNumber и сделать сводные таблицы по количествам вы заинтересованы, вы можете получить итоговые данные, которые вы ищете:

#Create data 
    set.seed(1) 
     fg_Sales <- data_frame(FG_PartNumber=rep(c("A","B","C"),2), 
          Order_Date=seq.Date(as.Date("2011-1-1"),as.Date("2012-1-10"),length.out = 6), 
          FG_UnitsSold=c(100,200,300,400,500,600)) 

    bill_materials <- data_frame(FG_PartNumber=rep(c("A","B","C"),4), 
           Components=c("C1","C2","C3","C4","C5","C6","C7","C7","C7","C8","C8","C9"), 
           Qty=rnorm(3,1,n = 12))%>% 
     arrange(FG_PartNumber) 

    library(dplyr) 
#make pivot tables for sales and quantity 

    tot_sales <- fg_Sales %>% 
     group_by(FG_PartNumber) %>% 
     summarise(tot_sales = sum(FG_UnitsSold)) 

    tot_materials <- bill_materials %>% 
     group_by(FG_PartNumber) %>% 
     summarise(tot_qty = sum(Qty)) 

#join the pivot tables together  
    df <- left_join(tot_sales, tot_materials) 

> df 
# A tibble: 3 × 3 
    FG_PartNumber tot_sales tot_qty 
      <chr>  <dbl> <dbl> 
1    A  500 13.15087 
2    B  700 14.76326 
3    C  900 11.30953 
0

Я думаю inner_join из dplyr лучшего выбор здесь:

library(dplyr) 
fg_Sales_ext <- inner_join(x = fg_Sales, 
          y = bill_materials, 
          by = "FG_PartNumber") 

из документации inner_join: «Если есть несколько соответствий между й и у, все сочетание согласующего s возвращаются ".

С fg_Sales_ext Вы можете провести анализ любого вида с group_by и summarise.

+0

Привет, evgeniC, это именно то, что мне нужно. Спасибо за вашу помощь! –

 Смежные вопросы

  • Нет связанных вопросов^_^