【发布时间】:2016-03-25 14:38:17
【问题描述】:
我有一些 data.table 的金额列,例如:
n = 1e5
set.seed(1)
dt <- data.table(id = 1:n, amount = pmax(0,rnorm(n, mean = 5e3, sd = 1e4)))
并且给出的中断向量如下:
breaks <- as.vector( c(0, t(sapply(c(1, 2.5, 5, 7.5), function(x) x * 10^(1:4))) ) )
对于由这些中断定义的每个间隔,我想使用data.table 语法来:
- 获取包含
amount的计数 - 获取
amount的计数等于或大于左边界(基本上是n * (1-cdf(amount))
对于 1,这主要是有效的,但不会返回空间隔的行:
dt[, .N, keyby = breaks[findInterval(amount,breaks)] ] #would prefer to get 0 for empty intvl
对于 2,我尝试了:
dt[, sum(amount >= thresh[.GRP]), keyby = breaks[findInterval(amount,breaks)] ]
但它不起作用,因为sum 仅限于组内,而不是组外。所以想出了一个解决方法,它也返回空间隔:
dt[, cbind(breaks, sapply(breaks, function(x) sum(amount >= x)))] # desired result
那么,data.table 修复我的 2. 并获得两者的空间隔的方法是什么?
【问题讨论】:
标签: r data.table