2016-08-25 4 views
0

jemand der Hoffnung kennt eine einfache Lösung in R.R: Ranking um einen Faktor und von einer Gruppe

Ich habe einen Datensatz 'Temp' mit der Anzahl der Variablen:

Department Product Var1 
    D1   P1  3 
    D1   P2  6 
    D2   P1  4 
    D3   P2  2 
    D3   P3  3 

So Var1 numerisch ist.

Es ist bereits für jedes Produkt in jeder Abteilung berechnet.

Jetzt versuche ich nach Produkt innerhalb jeder Abteilung Gruppe zu sortieren. Um nach Produkt Ranking war einfach:

ranked<-transform(temp, rank_Var1= ave(Var1, FUN = function(x) rank(x, ties.method = "average"))) 

Aber ich kann nicht finden, wie ich möglicherweise eine Bedingung stellen kann, die jetzt Rang Var1 innerhalb jeder Abteilung berechnet werden muss.

Ich werde jeden Hinweis sehr schätzen. Danke

+1

Ich würde das 'dplyr' Paket verwenden. Vielleicht 'temp%>% group_by (Abteilung, Produkt)%>% mutieren (Rang = Rang (Var1)' –

Antwort

2

Wir data.table

library(data.table) 
setDT(temp)[,rank_Var1 := rank(Var1, ties.method = "average"), by= .(Department, Product)] 

Wenn wir ave verwenden können, nach dem ersten Argument, wir die Gruppenvariablen angeben,

transform(temp, rank_Var1= ave(Var1, Department, Product, 
       FUN = function(x) rank(x, ties.method = "average"))) 
0

Thank you! Und ich die Antwort :) gefunden

temp2 < -ddply (Temp. (Abteilung), zusammenfassen, Product = Produkt, rank_Vq = ave (V1, FUN = function (x) Rang (x, ties.method = "Durchschnitt")))

Verwandte Themen