R数据表:将行值与组值进行比较

时间:2015-10-22 15:40:19

标签: r data.table

我想将每行的值与组的值进行比较。

例如,我从:

开始
x = data.table( id=c(1,1,1,2,2,2), price=c(100,110,120,100,100,120) )
> x
   id price
1:  1   100
2:  1   110
3:  1   120
4:  2   100
5:  2   100
6:  2   120

并希望到达:

> x
   id price nb_cheaper_prices_per_id
1:  1   100                        0
2:  1   110                        1
3:  1   120                        2
4:  2   100                        0
5:  2   100                        0
6:  2   120                        2

我试过了:

x[, sum(price<.SD[,price]), by=id]

但这不起作用。

1 个答案:

答案 0 :(得分:6)

x[,cheaper := floor(rank(price))-1, by=id]
#    id price cheaper
# 1:  1   100       0
# 2:  1   110       1
# 3:  1   120       2
# 4:  2   100       0
# 5:  2   100       0
# 6:  2   120       2

?rank会对每个组中的值进行排名。我添加?floor来取消处理关系的效果。第二种选择是使用ties.method="min"。最后,从等级中减去1以从0开始。