2013-05-13 32 views
0

我在以下主題中遇到了問題。查找R中的主數據

使用Excel後,這樣做的工作量很高。現在我想用自動的方式來處理它。

我有洗衣機的不同型號:

對於每一個模型,我有所有必需的組件一個data.frame。 FOR 1個MODEL如實施例

Component = c("A","B","C","D","E","F","G","H","I","J") 
Number = c(1,1,1,2,4,1,1,1,2,3) 
Model.A= data.frame(Component,Quantity) 

作爲第二信息,我有與所有組件,其由所有模型和在加入這些組分的實際庫存中使用的data.frame。

Component = c("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") 
Stock = c(100,102,103,105,1800,500,600,400,50,80,700,900,600,520,35,65,78,95,92,50,36,34,96,74,5,76) 

Comp.Stock = data.frame(Component,Stock) 

第三次也是最後一次的信息是關於每週的生產計劃。我有4個每週生產計劃=計劃1個月。我在洗衣機的模型上得到了一個數據框架,這些數據框架將在未來4周內生產,並且還有它們的數量。

pr.Models= c("MODEL.A","MODEL.B","MODEL.C","MODEL.D") 
Quantity= c(15000,1000,18000,16000,5000) 

Production= data.frame(pr.Models,Quantity) 

我的問題是,現在,將這些信息結合在一起,我可以與組件其中獲得生產的車型(最後的信息)進行比較。首先爲每個模型自己使用已使用的組件,另外還有包含所有組件和庫存信息的data.frame。

目標是獲取信息和警告,如果組件庫存不足以從生產計劃生成模型。

後市來看:(許多相同的組件被用不同型號的)

希望你明白我的意思,可以通過這個問題幫我。

謝謝=)

編輯:

我不能跟你所有的步驟:

也許這個想法也不錯,但我NEAD一個後如何做到這一點:

也許有可能將每個生產的模型(生產)與使用的組件合併。 (考慮生產數量和每臺洗衣機需要的數量)。

我的首選輸出是爲每個生成的模型自動生成所需組件的數據幀。

在接下來的步驟中,它應該能夠將這些數據與Comp.Stock合併,以便查看需要多久使用哪個組件並將其與庫存進行比較。

你有什麼想法嗎?

也許我是愚蠢的提出的方式...我真的需要一種自動的方式,因爲有超過4K不同組件和超過180個不同型號的洗衣機。

謝謝

比較。股票還與所有使用的型號及其quanitity(生產)

+1

您好,只是一個快速不談,當你創建一個使用您已經創建的對象'data.frame's,不要使用引號,因爲這'Model.A = data.frame(「Component」,「Quantity」)'只會給你一個兩個字符串的數據框,單詞「Component」和「Quantity」。相反,使用'Model.A = data.frame(Component,Quantity)' – 2013-05-13 01:56:08

+0

也看看'merge' – 2013-05-13 01:56:49

+0

好吧,當然你是正確的與data.frame信息我糾正它 – Daniel 2013-05-13 01:59:13

回答

5

你需要有型號名稱作爲第一data.frame列(匹配Production

Model.A$pr.Models <- 'MODEL.A' 

然後你就可以合併。請注意,有兩個「數量」欄,你不想被那些合併:

merged <- merge(merge(Model.A, Comp.Stock),Production, by='pr.Models') 

Extra是你將有多少手頭生產後:

transform(transform(merged, Needed = Quantity.x * Quantity.y), Extra = Stock - Needed) 
## pr.Models Component Quantity.x Stock Quantity.y Needed Extra 
## 1 MODEL.A   A   1 100  15000 15000 -14900 
## 2 MODEL.A   B   1 102  15000 15000 -14898 
## 3 MODEL.A   C   1 103  15000 15000 -14897 
## 4 MODEL.A   D   2 105  15000 30000 -29895 
## 5 MODEL.A   E   4 1800  15000 60000 -58200 
## 6 MODEL.A   F   1 500  15000 15000 -14500 
## 7 MODEL.A   G   1 600  15000 15000 -14400 
## 8 MODEL.A   H   1 400  15000 15000 -14600 
## 9 MODEL.A   I   2 50  15000 30000 -29950 
## 10 MODEL.A   J   3 80  15000 45000 -44920 

如果Extra是負面的,你需要更多的零件。你嚴重不足。

transform(transform(merged, Needed = Quantity.x * Quantity.y), Extra = Stock - Needed)$Extra < 0 
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

沒有足夠的任何部分。

作爲一個功能:

Not.Enough.Parts <- function(Model, Comp.Stock, Production) { 
    Model$pr.Models <- toupper(substitute(Model)) 
    merged <- merge(merge(Model, Comp.Stock),Production, by='pr.Models') 
    extra <- transform(transform(merged, Needed = Quantity.x * Quantity.y), Extra = Stock - Needed) 
    retval <- extra$Extra < 0 
    names(retval) <- extra$Component 
    return(retval) 
} 

Not.Enough.Parts(Model.A, Comp.Stock, Production) 
## A B C D E F G H I J 
## TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
+0

我可以自動化你的第一步嗎?因爲在一個月內有超過20種不同的模型,我想把這段代碼給那些不知道r的人,所以它應該很容易可能對他來說,我需要模型名稱作爲一個列表很明顯,你是對的..也許我可以改變這個被驅使的Exelfile從Excel中獲取這些信息嗎?.....我的意思是沒有在每一個生產計劃它自己的模型... – Daniel 2013-05-13 02:46:43

+0

在那裏從'Production'中提取'MODEL.A'行。在實際使用中,您會(或者更確切地說)應該在第一個數據框中有多個模型(或者多個rbind在一起在添加模型名稱後),但是,是的可以被自動化:'Model.A $ pr.Models < - toupper(替代(Model.A))'(這可以用在一個函數中,其中'Model.A'作爲參數傳遞)。 – 2013-05-13 02:55:01

+0

你好,我編輯我的第一篇文章,因爲我不能跟隨你的提交,或者更好地說我不能得到所需的好處...如果你需要更精確的數據,請告訴我 – Daniel 2013-05-13 05:46:02