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

tuc*_*son 1 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
Run Code Online (Sandbox Code Playgroud)

并希望到达:

> 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
Run Code Online (Sandbox Code Playgroud)

我试过了:

x[, sum(price<.SD[,price]), by=id]
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

Pie*_*une 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
Run Code Online (Sandbox Code Playgroud)

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