gpt4 book ai didi

r - 计算 value 和 value - x 之间的值的数量,按变量

转载 作者:行者123 更新时间:2023-12-04 17:29:35 27 4
gpt4 key购买 nike

我有一些数据:

library(data.table)
set.seed(1)
df1 <- data.frame(let=sample(sample(letters,2),5, replace=TRUE),
num=sample(1:10,5))
setDT(df1)
let num
1: j 7
2: j 6
3: g 1
4: j 2
5: j 10

我想计算 num的数量小于或等于 num AND 大于或等于 num - 4, by let .使用 data.table 包会更可取,但任何使用 dplyr 或 base r 的解决方案也可以。
输出将如下所示:
   let num countNumByLet
1: j 7 2
2: j 6 2
3: g 1 1
4: j 2 1
5: j 10 3

最佳答案

这也可以使用 non-equi 解决加入:

dt <- data.table(let = sample(sample(letters, n_let), n_let * n_per_grp, replace = T),
num = sample (20, n_let * n_per_grp, replace = T))

dt[, .(let, high = num + 4L, num)
][dt,
on = .(let,
num <= num,
high >= num),
.(countNumByLet = .N),
by = .EACHI
][, high:= NULL][]

let num countNumByLet
1: j 7 2
2: j 6 2
3: g 1 1
4: j 2 1
5: j 10 3

对于 5 的数据集,方法无关紧要。但是在扩大规模时,非对等联接确实有帮助:
n_let <- 26
n_per_grp <- 1E1

dt <- data.table(let = sample(sample(letters, n_let), n_let * n_per_grp, replace = T),
num = sample (20, n_let * n_per_grp, replace = T))

# 260 observations; 26 groups
# A tibble: 2 x 13
expression min median `itr/sec` mem_alloc
<bch:expr> <bch:> <bch:> <dbl> <bch:byt>
1 dt_sapply 2.41ms 2.67ms 364. 53.9KB
2 dt_non_equi 5.08ms 5.66ms 170. 223.7KB

#2,600 observations; 26 groups
# A tibble: 2 x 13
expression min median `itr/sec` mem_alloc
<bch:expr> <bch:t> <bch:t> <dbl> <bch:byt>
1 dt_sapply 11.49ms 12.15ms 80.3 4.67MB
2 dt_non_equi 6.39ms 7.25ms 117. 398.8KB

#26,000 observations; 26 groups
# A tibble: 2 x 13
expression min median `itr/sec` mem_alloc
<bch:expr> <bch:t> <bch:> <dbl> <bch:byt>
1 dt_sapply 404.1ms 404ms 2.47 403.46MB
2 dt_non_equi 24.2ms 25ms 39.8 2.09MB

#260,000 observations; 26 groups
# A tibble: 2 x 13
expression min median `itr/sec` mem_alloc
<bch:expr> <bch:t> <bch:t> <dbl> <bch:byt>
1 dt_sapply 38.6s 38.6s 0.0259 38.8GB
2 dt_non_equi 524.2ms 524.2ms 1.91 19.1MB

关于r - 计算 value 和 value - x 之间的值的数量,按变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59116614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com