R: цикл For для захвата данных из нескольких фреймов данных - PullRequest
0 голосов
/ 04 июля 2019

Я хочу создать некоторую функцию для получения желаемого результата.Я изучаю R и, следовательно, испытываю трудности при создании кода.

Это примеры фреймов данных, которые я хочу создать для большего набора данных

Фрейм данных 1:

 Item   LC1    LC2   LC3
8T4121  MW92    OY01    RM11
AB7654  MW92    WK14    RM11
AB7654  MW92    WK14    RS11

Кадр данных 2:

 Item   LC   custfcst
8T4121  MW92    10
8T4121  OY01    12
8T4121  RM11    10
AB7654  MW92    20
AB7654  WK14    10
AB7654  RM11    8
AB7654  RS11    21

Кадр данных 3:

 Item    LC     ToLC    Rolledfcst
8T4121  MW92    OY01    22
8T4121  OY01    RM11    10
AB7654  MW92    WK14    30
AB7654  WK14    RM11    12
AB7654  WK14    RS11    10

Кадр данных 4:

Item    LC      Safetystock(SS)       X
8T4121  MW92    15                   .25
8T4121  OY01    7                    .25
8T4121  RM11    5                    .25
AB7654  MW92    30                   .25
AB7654  WK14    8                    .25
AB7654  RM11    20                   .25
AB7654  RS11    15                   .25

Ожидаемый результат:

 Item   LC1      Pcntg     Share       RemSS    FinalSS        Leftover
8T4121  MW92   10/(22+10)  Pcntg*SS  SS-Share   Share+X*RemSS  SS-FinalSS
8T4121  OY01   12/(10+12)  Pcntg*SS  SS-Share   Share+X*RemSS  SS-FinalSS
8T4121  RM11       NA

Примечание:Здесь Остаток в Item 8T4121 и LC1 должны быть добавлены в SafetyStock в Dataframe 4 для того же Item, тогда только следующие вычисления должны произойти в 8T4121 и OY01

Шаги: 1. В Dataframe это полоса, из которой вытекает элементLC1 -> LC2 -> LC3

Для вывода по одному элементу, custfcst должен быть взят из DF2, Rolledfcst должен быть взят из DF3 для вычисления Pcntg

Аналогично, должны быть рассчитаны Share, RemSS, FinalSS, Остаток

После того, как мы вычислим для 1-го предмета, остаток должен быть добавлен в страховой запас для следующего LC для того же предмета

Когда мы наконец придемLC в Dataframe 1 для определенного элемента нет, тогда только SS + Остаток на предыдущем Lc должен быть добавлен.Никаких дальнейших вычислений не требуется.

В случае элемента AB7654 при вычислении астры в Wk 14 он должен делить оставшиеся SS в равных долях между RM11 и RS11

1 Ответ

0 голосов
/ 04 июля 2019

Вот решение Tidyverse, которое несколько раз использует left_join для объединения ваших фреймов данных:

library(dplyr)
library(tidyr)

df1 %>%
  as_tibble() %>%
  gather(key = LC_ref, value = LC, - Item) %>%
  left_join(select(df2, -Item), by = "LC") %>%
  left_join(select(df3, -Item, -ToLC), by = "LC") %>%
  mutate(percentage = ifelse(is.na(custfcst) | is.na(Rolledfcst), NA, paste(custfcst, Rolledfcst, sep = "/")),
         percentage_numerical = 100 * custfcst / Rolledfcst) %>%
  select(Item, LC, percentage, percentage_numerical)

# A tibble: 3 x 4
  Item   LC    percentage percentage_numerical
  <chr>  <chr> <chr>                     <dbl>
1 8T4121 MW92  10/22                      45.5
2 8T4121 OY01  12/10                     120  
3 8T4121 RM11  NA                         NA  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...