R: Цикл For для захвата данных из нескольких фреймов данных

Я хочу создать некоторую функцию, чтобы получить желаемый результат. Я изучаю 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.

  1. Для вывода по одному элементу, custfcst следует взять из DF2, Rolledfcst следует взять из DF3 для расчета Pcntg.
  2. Аналогичным образом должны быть рассчитаны Share, RemSS, FinalSS, Leftover.

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

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

В случае элемента AB7654, вычисление aster на 14-й неделе должно разделить оставшиеся SS поровну между RM11 и RS11.

Добавлен ожидаемый результат

Anshul Saravgi 04.07.2019 09:36

Может ли кто-нибудь предложить решение этого

Anshul Saravgi 04.07.2019 13:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот решение 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  

Другие вопросы по теме

Похожие вопросы