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))]