Я хочу создать некоторую функцию, чтобы получить желаемый результат. Я изучаю 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
Примечание. Здесь Остаток в элементе 8T4121 и LC1 должен быть добавлен в SafetyStock в фрейме данных 4 для того же элемента нет, тогда только следующее вычисление должно происходить в 8T4121 и OY01.
Шаги: 1. В кадре данных это полоса, по которой элемент перетекает из LC1 -> LC2 -> LC3.
Аналогичным образом должны быть рассчитаны Share, RemSS, FinalSS, Leftover.
После того, как мы рассчитаем стоимость 1-го предмета, остаток следует добавить к страховому запасу для следующего LC для того же предмета.
Когда мы наконец придем к LC в фрейме данных 1 для определенного элемента no, тогда следует добавить только SS + Остаток в предыдущем Lc. Никаких дополнительных расчетов не требуется.
В случае элемента AB7654, вычисление aster на 14-й неделе должно разделить оставшиеся SS поровну между RM11 и RS11.
Может ли кто-нибудь предложить решение этого





Вот решение 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
Добавлен ожидаемый результат