创建具有不同范围和权重的样本

时间:2019-07-05 05:17:36

标签: r

我要使用一些规则创建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

我找不到执行此操作的指针。谁能帮我同样的忙。非常感谢。

3 个答案:

答案 0 :(得分:2)

我们可以使用Map在OP帖子中显示的范围之间创建一个seq值,同时在范围内生成sample,并且比例也作为Map

的参数
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]

答案 1 :(得分:1)

我喜欢使用id包进行数据生成。在这种情况下,我回填了符合类别规则的值。 Simstudy提供了一个data.table对象,但是我对Tidyverse语法更加熟悉:

simstudy

答案 2 :(得分:1)

一种相当简单的方法:

1。这不是随机的,但是取决于应用程序,这可能就足够了

ConcurrentHashMap

2。在这里,您还将绘制来自每个类别的数字:更多随机...

out <- c(runif(600, 0.1, 0.3), runif(900, 0.4, 0.7), runif(1500, 0.7, 0.9))