0

次のようなデータセットがあります。

MQ = data.frame(Model=c("C150A","B174","DG18"),Quantity=c(5000,3800,4000))

MQ は data.frame で、1 週間先の Productionplan を示します。モデル生産モデルと数量

C150A = data.frame( Material=c("A0015", "A0071", "Z00071", "Z00080","Z00090", 
                   "Z00012","SZ0001"), Number=c(1,1,1,1,1,1,4))
B174= data.frame(Material=c("A0014","A0071","Z00080","Z00091","Z00011","SZ0000"), 
                                      Number=c(1,1,1,1,2,4))
DG18= data.frame( Material=c("A0014","A0075","Z00085","Z00090","Z00010","SZ0005"),
                                       Number=c(1,1,1,2,3,4))
T75A= data.frame(Material=c("A0013","A0075","Z00085","Z00090","Z00012","SZ0005"),
                                       Number=c(1,1,1,2,3,4))
G95= data.frame(Material=c("A0013","A0075","Z00085","Z00090","Z00017","SZ0008"),
                                       Number=c(1,1,1,2,3,4))

これらは生産可能なモデルです...

ここでの私の最初の問題は、Productionplan MQ に属し、必要なモデルを自動的に開き、Quantity にその数を掛けて、各コンポーネント (マテリアル) がいくつ必要かを知りたいということです。

出力は、すべての必要なコンポーネント (異なるモデルが同じコンポーネントと異なるコンポーネントを使用でき、必要なコンポーネントの量も異なる可能性があります) である data.frame である可能性があります。

 Material_Master= data.frame( Material=c( "A0013", "A001","A0015", "A0071", "A0075", 
                                "A0078", "Z00071", "Z00080", "Z00090", "Z00091", 
                                "Z00012","Z00091","Z00010""Z00012","Z00017","SZ0001", 
                                "SZ0005","SZ0005","SZ0000","SZ0008","SZ0009"), 
                              Number=c(20000,180000,250000,480000,250000,170000, 
                                       690000,1800000,17000,45000,12000,5000, 5000, 
                                       8000,16000,17000,45000,88000,7500,12000,45000))

最後のステップで、作成された data.frame を Material_Master データとマージする必要があります。マテリアル マスター データには、すべての重要なコンポーネントと在庫が記録されています。

私の例では、生産に必要なすべてのコンポーネントがマテリアル マスターにも記録されていますが、Material_Master でコンポーネントが欠落している可能性もあります。このコンポーネントは無視してください。

出力は、必要なコンポーネントの量と実際の在庫を比較するようなものでなければなりません。実際の在庫よりも多くの必要がある場合は、レポートを提出してください。

ご協力ありがとうございました。

4

1 に答える 1

2

これはうまくいくはずです:

mods <- do.call(rbind,lapply(MQ$Model,function(x)cbind(Model=x,get(x))))
full_plan <- merge(mods,MQ,by="Model")
material_plan <- with(full_plan,aggregate(Quantity*Number,by=list(Material),sum))
#    Group.1     x
# 1    A0014  7800
# 2    A0015  5000
# 3    A0071  8800
# 4    A0075  4000
# 5   SZ0000 15200
# 6   SZ0001 20000
# 7   SZ0005 16000
# 8   Z00010 12000
# 9   Z00011  7600
# 10  Z00012  5000
# 11  Z00071  5000
# 12  Z00080  8800
# 13  Z00085  4000
# 14  Z00090 13000
# 15  Z00091  3800

最初の行は、モデル名とともに各モデルを取得してスタックします。2 行目は結合して Quantity を取得し、3 行目は集計します。

先に進み、後者のモデル1のそれぞれの先頭にある を切り取って、使用可能な例を作成しました。Numberまた、Model 列と Material 列を因子ではなく文字として読み取ります。

options(stringsAsFactors=FALSE)
MQ = data.frame(Model=c("C150A","B174","DG18"),Quantity=c(5000,3800,4000))

C150A = data.frame(Material=c("A0015","A0071","Z00071","Z00080","Z00090","Z00012","SZ0001"),Number=c(1,1,1,1,1,1,4))
B174= data.frame(Material=c("A0014","A0071","Z00080","Z00091","Z00011","SZ0000"), Number=c(1,1,1,1,2,4))
DG18= data.frame(Material=c("A0014","A0075","Z00085","Z00090","Z00010","SZ0005"),Number=c(1,1,1,2,3,4))
T75A= data.frame(Material=c("A0013","A0075","Z00085","Z00090","Z00012","SZ0005"),Number=c(1,1,1,2,3,4))
G95= data.frame(Material=c("A0013","A0075","Z00085","Z00090","Z00017","SZ0008"),Number=c(1,1,1,2,3,4))

編集: @RicardoSaporta によって識別されるように、必要な stringAsFactors オプションを追加しました。

于 2013-05-14T02:18:00.423 に答える