2013-05-31 44 views
1

我已經使用聚合創建了一個接近我需要的數據框。但是,我遇到的問題正是我想要的。根據數值變量的最大值創建具有因子變量級別的數據框

假設原始數據如下:

data 


Order Item Price Quantity 
    1 A 10  1 
    1 A 20  3 
    2 B 30  1 
    2 C 40  1 
    3 B 30  1 
    4 C 50  1 
    5 A 10  1 
    5 B 40  2 

我現在和價格和數量根據項目和訂單。

data.new <- aggregate(cbind(price, quantity) ~ Order + Item, sum, data = data) 
data.new 

╔═══════╦══════╦═══════╦══════════╗ 
║ Order ║ Item ║ Price ║ Quantity ║ 
╠═══════╬══════╬═══════╬══════════╣ 
║  1 ║ A ║ 30 ║  4 ║ 
║  2 ║ B ║ 30 ║  1 ║ 
║  2 ║ C ║ 40 ║  1 ║ 
║  3 ║ B ║ 30 ║  1 ║ 
║  4 ║ C ║ 50 ║  1 ║ 
║  5 ║ A ║ 10 ║  1 ║ 
║  5 ║ B ║ 40 ║  2 ║ 
╚═══════╩══════╩═══════╩══════════╝ 

這對於Order = 1很好,但我需要每一行都是唯一的Order。所以,我希望總結項目的最高價格爲每個獨特的訂單。該項目只是一個高水平的因素,以表明推動獨特訂單的大部分銷售價格。它看起來應該如下:使用plyr

data.new <- ???? 
data.new 

╔═══════╦══════╦═══════╦══════════╗ 
║ Order ║ Item ║ Price ║ Quantity ║ 
╠═══════╬══════╬═══════╬══════════╣ 
║  1 ║ A ║ 30 ║  4 ║ 
║  2 ║ C ║ 70 ║  2 ║ 
║  3 ║ B ║ 30 ║  1 ║ 
║  4 ║ C ║ 50 ║  1 ║ 
║  5 ║ B ║ 50 ║  3 ║ 
╚═══════╩══════╩═══════╩══════════╝ 
+0

僅供參考 - 所有對您的示例數據的瘋狂格式化使得幾乎不可能讓任何人真正地使用它,這種方式無法達到目的。更好的是,我的編輯將提供'dput(data)'的輸出。 – joran

+0

對不起,我不確定如何爲stackexchange設置一個表格的格式,並引用了這個http://meta.stackexchange.com/questions/73566/is-there-any-markdown-to-create-tables,這導致了我這樣做http://www.sensefulsolutions.com/2010/10/format-text-as-table.html – kzoo

+0

不用擔心。只是當您提供R問題的示例數據時,最重要的是以一種方便人們轉移到他們自己的R會話的方式進行。 – joran

回答

2

這裏有一個選項(很多很多的選項中):

ddply(data,.(Order), 
     summarise, 
     Item = unique(Item[which.max(Price)]), 
     Price = sum(Price), 
     Quantity = sum(Quantity)) 

    Order Item Price Quantity 
1  1 A 30  4 
2  2 C 70  2 
3  3 B 30  1 
4  4 C 50  1 
5  5 B 50  3 

這裏假設你不會有兩個不同的最高價格分項目。

+0

非常感謝。它做我的要求。對於最大價格在兩個不同項目之間分配的情況,它選擇按字母順序排列的第一個項目,這對我的需求已足夠。 – kzoo

相關問題