我想将每行的值与组的值进行比较。
例如,我从:
开始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]
但这不起作用。
答案 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开始。