You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言大数据量下快速判定数值所属分层区间的高效方法

问题说明

数据的strata列存储了数值列表,需要将该列的列表作为每行对应values值的分箱截断值,下方给出的现有实现方案来自r2evans。
由于当前使用的数据集规模较大,需要找到运算速度更快的实现方式,达成和现有方案完全一致的分箱效果。

示例数据与现有实现

# 加载依赖包
library(data.table)
library(Hmisc)

# 构造示例数据
dat <- structure(list(values = c(25, 11, 21, 15), strata = list(c(10, 20, 30, 40), c(10, 20, 30), c(10, 20), c(10, 30))), row.names = c(NA, 
-2L), class = c("data.table", "data.frame"))

# 示例数据预览
#    values      strata
# 1:     25 10,20,30,40
# 2:     11    10,20,30
# 3:     21       10,20
# 4:     15       10,30

# 现有实现代码
setDT(dat)
dat[, cat := mapply(cut, values, strata, oneval=FALSE)]
dat

# 运行结果预览
#    values      strata     cat
#     <num>      <list>  <fctr>
# 1:     25 10,20,30,40 [20,30)
# 2:     11    10,20,30 [10,20)
# 3:     21       10,20 <NA>
# 4:     15       10,30 [10,30]

各方案性能测试结果

不同实现方案在真实大规模数据集上的运行耗时统计如下:

# 总耗时2分钟
dat[, cat := mapply(cut2, values, strata, oneval=FALSE)]

# 总耗时51秒
dat[, cat := mapply(cut, values, strata, oneval=FALSE)]

# 总耗时21秒
arau提供的方案

# 总耗时8秒
Uwe提供的方案

# 依赖包加载耗时44秒,实际计算耗时0.2秒
onyambu提供的方案

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:03:22