提取在R中随机采样的字符概率

时间:2017-10-17 16:23:38

标签: r subset sample

我定义了以下变量:

a <- as.character(1:10)
b <- 100
c <- 10
probs <- c(0.3, 0.3, 0.3, rep(0.1/7, 7))
min <- 5
max <- 10

我正在试图弄清楚如何将&#39; probs&#39;下面代码中的参数与随机抽样的字符(即随机抽样字符5:10)对应

sample(a[min:max], size = round(b/c), replace = TRUE, prob = probs[???])

我不认为probs [min:max]会按预期工作,但我不确定如何确定是否确实如此。更复杂的情况是我想要像

这样的东西
a[c(1, 3, 5)]

然后我需要&#39; probs&#39;对应于字符1,3和5。

我尝试过使用probs [get(paste0(...))],但这不是最直接有效的方法。它无论如何都不起作用。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

您只需将probs的子集与a的子集相同,例如

index = min:max
sample(a[index], size = round(b/c), replace = TRUE, prob = probs[index])

对于更复杂的情况,请设置index = c(1,3,5)

你可以看到,这可以通过模拟并将观察到的概率与真实概率进行比较来实现:

set.seed(123)
tmp = sample(a[min:max], size = 10000, replace = TRUE, prob = probs[min:max])
table(tmp)/10000 # the observed probabilities

观察到的概率大致相等,这与真实概率相等是一致的。

如果您查看sample的帮助文件,您会发现prob不需要总和为1.该函数将负责规范概率。< / p>