R:根据概率选择子集

时间:2019-02-21 00:25:53

标签: r probability sample

我是R的新手。我的分布正常。

{{1}}

作为练习,我想基于从值得出的概率曲线创建一个子集。例如,对于值<5,我想保留25%的随机条目,对于值> 15,我想保留75%的随机条目,对于5到15之间的值,我想线性插值概率选择范围介于25%和75%之间。似乎我想要的是“ sample”命令及其“ prob”选项,但我不清楚语法。

2 个答案:

答案 0 :(得分:1)

对于前两个子集,我们可以使用

idx1 <- n < 5
ss1 <- n[idx1][sample(sum(idx1), sum(idx1) * 0.25)]
idx2 <- n > 15
ss2 <- n[idx2][sample(sum(idx2), sum(idx2) * 0.75)]

第三个是

idx3 <- !idx1 & !idx2
probs <- (n[idx3] - 5) / 10 * (0.75 - 0.25) + 0.25
ss3 <- n[idx3][sapply(probs, function(p) sample(c(TRUE, FALSE), 1, prob = c(p, 1 - p)))]

其中probsn[idx3]的每个元素的线性插值概率。然后,使用sapply为每个元素绘制TRUE(获取)或FALSE(不获取)。

答案 1 :(得分:0)

prob中的sample()选项为要采样的向量提供了几率的概率。

https://www.rdocumentation.org/packages/base/versions/3.5.2/topics/sample

因此,如果我理解正确的问题,您想要的是仅对<5的25%的值进行采样,对于> 75的值仅对75%的值进行采样,依此类推。

然后您必须使用n参数

如文档所述

n 正数,即要选择的项目数。参见“详细信息”。

您可以在其中输入所需样本的百分比乘以样本向量的长度。

对于最后一个示例,您可以添加一个统一变量,其范围从.25到.75 runif()

希望这会有所帮助!