6
Ich habe eine df
mit Typen und Werten. Ich möchte sie in der Reihenfolge x
innerhalb type
ordnen und eine Zählung geben, wie viele andere Zeilen Zeile n
höheren Wert von x
hat als (Spalte pos
).Berechne Ränge für jede Gruppe
z.B.
df <- data.frame(type = c("a","a","a","b","b","b"),x=c(1,77,1,34,1,8))
# for type a row 3 has a higher x than row 1 and 2 so has a pos value of 2
Ich kann dies tun mit:
library(plyr)
df <- data.frame(type = c("a","a","a","b","b","b"),x=c(1,77,1,34,1,8))
df <- ddply(df,.(type), function(x) x[with(x, order(x)) ,])
df <- ddply(df,.(type), transform, pos = (seq_along(x)-1))
type x pos
1 a 1 0
2 a 1 1
3 a 77 2
4 b 1 0
5 b 8 1
6 b 34 2
Aber dieser Ansatz nicht berücksichtigt Verbindungen zwischen Typ a
Zeile 1 und 2. Was ist der einfachste Weg, um die Ausgabe zu bekommen, wo Beziehungen das gleiche haben Wert zB
type x pos
1 a 1 0
2 a 1 0
3 a 77 2
4 b 1 0
5 b 8 1
6 b 34 2
+1 nicht erforderlich! 'rank' zum Werkzeugkasten hinzugefügt! – user1320502
+1! aber warum die 'min' tie Methode? – agstudy
gerade gelesen "min" es macht die Bindungen haben den Mindestwert in der Reihenfolge, die sie im Vektor gefunden werden. andernfalls hätten meine Bindungen beide einen Wert von 1 – user1320502