You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何按指定概率为不同活动组随机分配休闲活动时长

错误原因
  • sample()函数要求prob参数的长度必须和待采样向量x的长度完全一致,你的代码中待采样的mynumbers有10个元素,但prob只给了4个值,长度不匹配触发报错。
  • 原有代码逻辑不符合需求:sample()的作用是从给定向量中随机抽取元素,无法实现「将单人总时长按概率拆分为4类活动时长」的目标。
  • 你的代码中还存在笔误:活动b的原始概率为0.2,你写的myprob里误填为0.3。
实现方案

核心逻辑分为两步:先按正态分布生成10人的总休闲时长,再对每个用户的总时长按4类活动的概率拆分,提供两种拆分逻辑可选:

  1. 固定比例拆分:严格按给定概率分配时长,结果完全符合概率比例
  2. 带随机波动的拆分:用多项分布模拟真实使用场景的随机差异,整体统计层面符合给定概率,单个用户的分配比例有合理波动

可运行代码

# 基础参数配置
activity_prob <- c(a = 0.4, b = 0.2, c = 0.33, d = 0.07)
user_num <- 10
mu <- 2
sigma <- 0.4

# 生成10人的总休闲时长
total_leisure_time <- rnorm(user_num, mean = mu, sd = sigma)

# 定义时长分配函数
allocate_time <- function(total, prob) {
  # 方案1:固定比例分配,注释掉下行换方案2即可
  return(total * prob)
  
  # 方案2:带随机波动的分配,按分钟精度生成随机分配再转回小时
  # return(as.vector(rmultinom(1, size = round(total * 60), prob = prob)) / 60)
}

# 批量生成所有用户的活动时长结果
result <- t(sapply(total_leisure_time, allocate_time, prob = activity_prob))
# 追加总时长列用于核对
result <- cbind(result, total = rowSums(result))

# 输出结果
print(result)

如果需要输出为更易读的格式,可以直接转成数据框:as.data.frame(result)

内容的提问来源于stack exchange,提问作者SHIRLEEN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:48:02