首页 > 解决方案 > 创建具有不同范围和权重的样本

问题描述

我想用一些规则创建一个包含 3000 个条目的总样本:

Category-1(low)  0.1 - 0.3
Category-2(Medium)  0.4 - 0.7
Category-3(High)  0.7 - 0.9 

我想以每个类别都有权重的方式创建样本,例如:

Category-1(low)  20% of the dataset
Category-2(Medium)  30% of the dataset 
Category-3(High)  50% of the dataset

我无法找到这样做的指针。任何人都可以帮助我。提前非常感谢。

标签: r

解决方案


我们可以使用在 OP 帖子中显示的范围之间Map创建值的影响,同时生成范围内的比例也作为参数传递给seqsampleMap

lst1 <- Map(function(x, y, z) sample(seq(x, y, by = 0.1), z, 
  replace = TRUE), c(0.1, 0.4, 0.7), c(0.3, 0.7, 0.9), c(0.2, 0.3, 0.5) * 3000)
names(lst1) <- c("low", "medium", "high")
lengths(lst1)
#   low medium   high 
#   600    900   1500 

out <- unlist(lst1)
length(out)
#[1] 3000

如果我们需要两列 data.frame

dat <- stack(lst1)[2:1]

推荐阅读