R:基于所有行的每行的条件

DJJ*_*DJJ 0 r data.table

一行的每个值如何与表的每个值进行比较?更具体地说,假设我有下表:

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)

sha*_*dow 5

你可以rank一起使用ties.method = "min".

DT[, count := rank(w, ties.method = 'min') - 1]
Run Code Online (Sandbox Code Playgroud)

  • @RStudent,我觉得我欠你一个解释.虽然我认为影子的答案是这个特定操作中最有趣的答案,但我需要你的答案,因为它更灵活并允许其他操作.比如`DT [,count:= sapply(w,function(x)sum(x> w&x <v))]`.但是因为提出了一个不精确的问题,这个错误可能是我的错. (2认同)