r - 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 应添加到数据帧 4 的 SafetyStock 中,用于相同的项目,然后只有下一次计算应该发生在 8T4121 和 OY01
步骤: 1. 在Dataframe中,item从LC1-->LC2-->LC3流出的lane
- 对于输出,每个 Item 一个,custfcst 应取自 DF2,Rolledfcst 应取自 DF3 以计算 Pcntg
同理,Share、RemSS、FinalSS、Leftover 也要计算
在我们计算出第一个项目的剩余部分后,应将剩余部分添加到同一项目的下一个 LC 的安全库存中
当我们最后在 Dataframe 1 中为特定项目找到 LC 时,应该只添加前一个 Lc 的 SS+Leftover。无需进一步计算。
在项目 AB7654 的情况下,第 14 周的 aster 计算应该在 RM11 和 RS11 之间平均分配剩余的 SS
解决方案
这是一个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
推荐阅读
- java - Spring boot - 使用@PropertySource 记录到文件不起作用
- assembly - 程序集 32 位保护模式,标签不指向定义的字符串?
- python - 如何在 Django ManyToMany 字段中选择相同的对象两次
- javascript - 如何使用 Mongoose 将增量数字附加到 Slug?
- php - 用 PHP 反应应用程序。Dockerfile 实现
- sql - 在 R 中使用选择创建子集
- javascript - 用单词前后的特殊字符替换单词
- mathematical-optimization - 最大化调度问题的相同操作模式的连续天数
- docker - docker 容器中的 GUI 菜单冻结(ubuntu 父映像)
- azure - 无法将点节点池添加到 Azure Kubernetes 集群