2015-10-07 43 views
0

我剛開始學習使用R.如何找到每個產品類別中月度價格漲幅最大的前10名產品?如何在每個類別中查找價格漲幅最大的前10名產品

+0

*「的問題,要求我們建議還是找一本書,工具,軟件庫,教程或其他非現場資源對於堆棧溢出而言是無關緊要的,因爲它們傾向於吸引自以爲是的答案和垃圾郵件,而是描述問題以及到目前爲止解決問題所做的工作。「* – 2015-10-07 00:27:33

+0

我沒有認爲這是一個工具請求。需要更多信息 –

+0

第一步是**按產品的價格**提供數據**。如果你有這些,展示一個小樣本,或模擬一個小樣本,我們可以開始幫助! – Gregor

回答

2

如果你可以使用包dplyr:

library(dplyr) 
df <- read.table(text=" 
Category, Product, PrevMonthPrice, CurrentMonthPrice 
Food,Orange,5,10 
Clothing,Shirt,25,35 
Food,Apple,2,4 
Clothing,Hat,25,15 
Food,Soup,4.5,3 
Clothing,Coat,150,200 
Food,Meat,9,11 
Clothing,Scarf,20,25 
Food,Rice,8,12 
Clothing,Shoes,150,125", sep=",", header=TRUE) 

df %>% 
     mutate(increase=CurrentMonthPrice-PrevMonthPrice) %>% 
     group_by(Category) %>% 
     arrange(-increase) %>% 
     top_n(2) 


Source: local data frame [4 x 5] 
Groups: Category [2] 

    Category Product PrevMonthPrice CurrentMonthPrice increase 
    (fctr) (fctr)   (dbl)    (int) (dbl) 
1 Clothing Coat   150    200  50 
2 Clothing Shirt    25    35  10 
3  Food Orange    5    10  5 
4  Food Rice    8    12  4 
0

你可以得到與 「純」 R相同的結果:

df$increase=df$CurrentMonthPrice-df$PrevMonthPrice 
top=2 
res=lapply(split(df,df$Category), function(xd){ 
    xd[with(xd,order(-increase)),][1:top,] 
}) 

do.call(rbind,res) 
相關問題