r 将数字与数据集中的定制子集进行比较
r Compare a number to a tailored subset in the dataset
我想计算在定制的子集中有多少行具有更大的数字。例如在以下数据集中:
data = data.table(x=c(rep(1,8),rep(2,8)),y=c(rep(1:8,each=2)),z=c(1,2,3,4,5,4,3,2,1,2,3,4,5,4,3,4))
对于每一行 i,我想知道,在 x=x[i] 和 [=20= 的行中]y,其中有多少个z大于z[i].
预期的输出是
c(0,0,0,0,0,0,3,4,0,0,0,0,0,0,3,1)
我可以为它编写一个函数并使用 apply 在每一行上循环它。但是,数据集有超过 30,000,000 行,这需要几天时间。在 R data.table 或 tidyverse 或其他包中有更快的计算方法吗?
我们可以为此使用 non-equi 连接
library(data.table)
data[data, .N, on = .(x = x, y < y, z > z), by = .EACHI]
x y z N
<num> <int> <num> <int>
1: 1 1 1 0
2: 1 1 2 0
3: 1 2 3 0
4: 1 2 4 0
5: 1 3 5 0
6: 1 3 4 0
7: 1 4 3 3
8: 1 4 2 4
9: 2 5 1 0
10: 2 5 2 0
11: 2 6 3 0
12: 2 6 4 0
13: 2 7 5 0
14: 2 7 4 0
15: 2 8 3 3
16: 2 8 4 1
我想计算在定制的子集中有多少行具有更大的数字。例如在以下数据集中:
data = data.table(x=c(rep(1,8),rep(2,8)),y=c(rep(1:8,each=2)),z=c(1,2,3,4,5,4,3,2,1,2,3,4,5,4,3,4))
对于每一行 i,我想知道,在 x=x[i] 和 [=20= 的行中]y
预期的输出是
c(0,0,0,0,0,0,3,4,0,0,0,0,0,0,3,1)
我可以为它编写一个函数并使用 apply 在每一行上循环它。但是,数据集有超过 30,000,000 行,这需要几天时间。在 R data.table 或 tidyverse 或其他包中有更快的计算方法吗?
我们可以为此使用 non-equi 连接
library(data.table)
data[data, .N, on = .(x = x, y < y, z > z), by = .EACHI]
x y z N
<num> <int> <num> <int>
1: 1 1 1 0
2: 1 1 2 0
3: 1 2 3 0
4: 1 2 4 0
5: 1 3 5 0
6: 1 3 4 0
7: 1 4 3 3
8: 1 4 2 4
9: 2 5 1 0
10: 2 5 2 0
11: 2 6 3 0
12: 2 6 4 0
13: 2 7 5 0
14: 2 7 4 0
15: 2 8 3 3
16: 2 8 4 1