r - 使用分位数箱的 ID 的 data.table 中的新列值

标签 r data.table

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/

相关文章:

r - 在 R 中绘制圆圈

r - data.table:如何根据包含列名的分组唯一行值更改列值

r - data.table 相当于 tidyr::complete with group_by with on and by 语法

r - 如何在嵌套函数中将所有可能的内容传递给 i、j 和 by?

r - 无法将 ggproto 对象添加在一起

r - 如何阻止单个变量 data.frame 成为向量?

RStudio - 更改默认代码块

oop - R : Use a different base field/corpus 中的运算符重载和类定义

r - 在 data.table 向量中对列表进行排序

r - 同时子集行和列