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