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

R:基于所有行的每行条件,r,data.table,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

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

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
我怎样才能发现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

例如:

 set.seed(123)
 DT$count <- sapply(DT$w, function(x) sum(x > DT$w))
 DT
   x y v   w count
1: a 1 1  -5     2
2: a 3 2  -2     3
3: a 6 3  15     7
4: b 1 4   0     4
5: b 3 5   1     5
6: b 6 6  17     8
7: c 1 7   4     6
8: c 3 8 -12     0
9: c 6 9  -6     1
set.seed(123)
DT$count DT$w)
DT
x y v w计数
1:a 11-5 2
2:a 3 2-2 3
3:63157
4:B1404
5:B3515
6:b 6 17 8
7:C1746
8:C38-120
9:C69-61

例如:

 set.seed(123)
 DT$count <- sapply(DT$w, function(x) sum(x > DT$w))
 DT
   x y v   w count
1: a 1 1  -5     2
2: a 3 2  -2     3
3: a 6 3  15     7
4: b 1 4   0     4
5: b 3 5   1     5
6: b 6 6  17     8
7: c 1 7   4     6
8: c 3 8 -12     0
9: c 6 9  -6     1
set.seed(123)
DT$count DT$w)
DT
x y v w计数
1:a 11-5 2
2:a 3 2-2 3
3:63157
4:B1404
5:B3515
6:b 6 17 8
7:C1746
8:C38-120
9:C69-61

您可以将
rank
ties.method=“min”
一起使用


您可以将
rank
ties.method=“min”
一起使用


人们似乎真的很喜欢你的答案,他们甚至否决了我的答案。也许我应该让OP接受你的答案:-)@RStudent好吧,OP似乎在寻找你的答案这就是为什么我们有投票权和OP的复选标记。他们不必同意。@r学生,我觉得我应该向你解释一下。虽然我认为shadow的答案是这个特定操作最有趣的答案,但我需要你的答案,因为它更灵活,允许其他操作。例如,像
DT[,count:=sapply(w,函数(x)sum(x>w&x
。但我的错可能是问了一个不准确的问题。人们似乎真的很喜欢你的答案,他们甚至对我的答案投了反对票。也许我应该让OP接受你的答案:-)@RStudent好吧,OP似乎在寻找你的答案这就是为什么我们有投票权和OP的复选标记。他们不必同意。@r学生,我觉得我应该向你解释一下。虽然我认为shadow的答案是这个特定操作最有趣的答案,但我需要你的答案,因为它更灵活,允许其他操作。例如,像
DT[,count:=sapply(w,函数(x)sum(x>w&x
。但是我的错可能是问了一个不准确的问题。非常感谢你。我将把两个答案结合起来,如下所示:
DT[,count:=sappy(w,函数(x)sum(x>w))]
非常感谢您。我将结合这两个答案,如下所示:
DT[,count:=sappy(w,函数(x)sum(x>w))]