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

如何用data.table根据列值生成随机整数?适配大数据集提升效率

使用data.table高效生成每行对应上限的随机整数

首先需要指出:你提供的Base R代码dt$random <- sample(1:dt$value, size=nrow(dt), rep = TRUE)无法正确实现需求——因为1:dt$value会将整个value向量的元素作为序列上限循环生成,而非每行生成1到对应行value的随机数。正确的Base R实现通常会用apply,但这种循环方式在大数据集上速度极慢。

以下是data.table的高效实现方案,优先推荐完全向量化的方法:

方法一:向量化生成(最快,适合超大数据集)

利用均匀分布随机数的向量化特性,直接生成每行的随机整数,全程无循环,性能最优:

library(data.table)
# 将现有数据框转换为data.table(如果还不是的话)
setDT(dt)
# 生成随机列:每个值在1到对应行value之间(包含两端)
dt[, random := floor(runif(.N, min = 1, max = value + 1))]

原理:runif(.N, 1, value+1)生成[1, value+1)区间的均匀随机数,通过floor取整后,恰好得到1到value之间的整数,统计上和sample(1:x, 1)等价,但速度提升几个数量级。

方法二:使用mapply(兼容sample.int逻辑)

如果需要严格调用sample.int实现抽样(和Base R的sample逻辑完全一致),可以用mapply结合data.table语法,比Base R的apply更快:

dt[, random := mapply(sample.int, n = value, size = 1)]

但这种方式本质还是逐行操作,速度远不如方法一,仅在特殊场景下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:32:15