quantile(X, prob = seq(0, 1, length = 5), type = 5)
您如何将其转移到 data.table 操作中以使用 :=
添加新列并为每个 ID 分配一个值,如果该值落在 bin 内则分配一个适当的有序值例如每个 ID 25%=1、50%=2 等?
最佳答案
您可以使用 findInterval
。这将允许您使用 quantile
及其各种定义。
例如
findInterval(x, quantile(x,type=5), rightmost.closed=TRUE)
# It is fast
set.seed(1)
DT <- data.table(x=rnorm(1e6))
library(microbenchmark)
microbenchmark(
order = DT[order(x),bin:=ceiling(.I/.N*5)],
findInterval = DT[, b2 :=findInterval(x, quantile(x,type=5), rightmost.closed=TRUE)],times=10 )
## Unit: milliseconds
## expr min lq median uq max neval
## order 551.31154 568.20324 573.36605 640.3255 655.5024 10
## findInterval 70.16782 79.11459 80.36363 140.2807 147.3080 10
关于r - 使用分位数箱的 ID 的 data.table 中的新列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19442086/