如何在R中生成指定比例的1、2、3、4?困惑rpois的用法
按指定比例生成离散随机数据的实现方法
你需要的是固定比例/频数的离散数据(1占50%、2占30%、3占15%、4占5%),rpois()函数是生成泊松分布随机整数的工具,它本身无法直接控制各数值的出现比例,更适配需求的是使用sample()函数,以下是具体实现:
方法一:生成近似指定比例的随机数据
通过sample()的prob参数设置权重,生成符合比例的随机样本:
# 生成100个符合指定比例的随机数 x <- sample( x = c(1, 2, 3, 4), size = 100, replace = TRUE, prob = c(0.5, 0.3, 0.15, 0.05) ) # 查看频数,结果会接近1:50、2:30、3:15、4:5 table(x, useNA = "ifany")
方法二:生成完全精确频数的数据
如果需要严格得到1:50、2:30、3:15、4:5的频数,可以直接构造数据后打乱顺序:
# 构造精确频数的数据集 x <- c(rep(1, 50), rep(2, 30), rep(3, 15), rep(4, 5)) # 打乱数据顺序(可选步骤,若不需要随机顺序可省略) x <- sample(x) # 查看频数,结果完全符合要求 table(x, useNA = "ifany")
关于rpois()的说明
rpois()是基于泊松分布生成随机数,泊松分布的概率由参数λ决定,无法直接设置各数值的出现比例。如果硬要用它近似你的需求,只能通过调整λ让概率接近目标比例,但无法保证精确的频数。例如λ=1.6时,各数值的出现概率大致接近你的要求:
# 设置随机种子保证结果可复现 set.seed(123) # 用rpois生成近似数据 x <- rpois(n = 100, lambda = 1.6) # 查看频数,结果仅为近似,无法确保完全符合要求 table(x, useNA = "ifany")
内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai
相关产品推荐
相关产品推荐

