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

如何在R的data.table中基于分布实现数据集间的值映射

解决方案

你可以利用data.table结合sample()函数,基于small_data中的百分比(或计数)作为权重,给big_data的每个ID分配对应日期,实现近似比例的映射:

set.seed(123) # 保持结果可复现

# 基于small_data的日期和对应的百分比权重,为big_data分配日期
big_data[, date := sample(small_data$date, size = .N, replace = TRUE, prob = small_data$perc)]

# 查看分配后的结果(前6行)
head(big_data)

# 验证分配比例是否符合预期
big_data[, .(count = .N, perc = 100*.N/nrow(big_data)), by = date][order(-perc)]

代码说明

  • sample()函数的prob参数传入small_data$perc,让采样概率和原数据的百分比对应,实现近似比例分配
  • .N在data.table中代表当前分组的行数,这里直接匹配big_data的总行数完成采样
  • 最后验证步骤可以查看每个日期的实际分配比例,确认和原数据的perc近似匹配

示例验证结果

运行上述代码后,你会得到类似这样的分配比例(因随机采样会有微小差异):

date count      perc
 1: 2019-10-01     9  9.000000
 2: 2016-10-01     8  8.000000
 3: 2017-07-01     8  8.000000
 4: 2016-01-01     7  7.000000
 5: 2017-10-01     7  7.000000
 6: 2018-10-01     7  7.000000
 7: 2019-07-01     6  6.000000
 8: 2016-10-01     6  6.000000
 9: 2019-04-01     4  4.000000
10: 2017-01-01     4  4.000000
11: 2018-01-01     4  4.000000
12: 2017-10-01     3  3.000000
13: 2016-07-01     3  3.000000
14: 2018-01-01     2  2.000000
15: 2019-01-01     2  2.000000
16: 2017-04-01     2  2.000000
17: 2019-01-01     2  2.000000

可以看到各日期的分配比例和原small_data中的perc基本近似,满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:01:22