df
タイプと値を持つがあります。x
それらを範囲内の順序でランク付けし、行が(column)よりも高い値を持つtype
他の行の数をカウントしたいと思います。n
x
pos
例えば
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
私はこれを行うことができます:
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
ただし、このアプローチでは、タイプ行1と2の間のタイは考慮されませんa
。タイが同じ値を持つ場合に出力を取得する最も簡単な方法は何ですか。
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