一行的每个值如何与表的每个值进行比较?更具体地说,假设我有下表:
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6),
v=1:9,w=as.integer(rnorm(9)*10))
> DT
## x y v w
## 1: a 1 1 0
## 2: a 3 2 0
## 3: a 6 3 6
## 4: b 1 4 -4
## 5: b 3 5 -27
## 6: b 6 6 10
## 7: c 1 7 4
## 8: c 3 8 1
## 9: c 6 9 7
Run Code Online (Sandbox Code Playgroud)
如何找到w的数量大于每个w?期望的输出:
> DT1
## x y v w count
## 1: a 1 1 0 2 # 0 is greater than -4 and -27
## 2: a 3 2 0 2
## 3: a 6 3 6 6
## 4: b 1 4 -4 1
## 5: b 3 5 -27 0
## 6: b 6 6 10 8
## 7: c 1 7 4 6
## 8: c 3 8 1 3
## 9: c 6 9 7 7
Run Code Online (Sandbox Code Playgroud)
你可以rank一起使用ties.method = "min".
DT[, count := rank(w, ties.method = 'min') - 1]
Run Code Online (Sandbox Code Playgroud)