r - 在 tapply() 中为 sample() 分配概率
问题描述
使用以下内容:
name<-c(rep("Adam", times = 6), rep("Barry", times = 4), rep("Charlie", times = 5))
group<-c(1:15)
probs<-c(0.4, 0.2, 0.1, 0.15, 0.1, 0.05, 0.25, 0.35, 0.3, 0.1, 0.2, 0.15, 0.30, 0.15, 0.2)
df<-data.frame(name, group, probs)
我正在尝试创建一个输出,该输出采用每个 $name 并根据 $probs 的概率为其分配一个 $group。例如,亚当有 40% 的机会在第 1 组,20% 的机会在第 2 组,10% 的机会在第 3 组,等等。
最终结果将根据这些概率为每个名称返回一组,看起来像这样
Adam Barry Charlie
5 10 12
我相信我应该使用 tapply() 并运行以下命令,但这并不能解释各种概率
tapply(df$group, df$name, sample, 1)
为了利用各种概率,我也尝试了以下方法,但由于概率数不正确,它返回错误
tapply(df$group, df$name, sample, 1, prob = df$probs)
非常感谢任何有关如何解决这些问题并获得所需输出的见解。
解决方案
tapply 只能接受一个向量,因此您需要执行以下操作:
by(df,df$name,function(i)sample(i$group,1,prob=i$probs))
然而输出不是那么好,
df$name: Adam
[1] 2
------------------------------------------------------------
df$name: Barry
[1] 8
------------------------------------------------------------
df$name: Charlie
[1] 12
推荐阅读
- javascript - Javascript Accordian Navbar/Dropdown 打开和关闭
- php - 我在哪里可以找到“您必须启用 cookie 才能使用 WordPress”。在wordpress上?
- machine-learning - weka中成本/收益分析中随机和增益的含义
- puppeteer - 无限滚动完成后获取帖子标题
- reactjs - 打包和发布 npm 模块的最简单方法是什么?
- reactjs - 下载 s3 对象时避免打开新窗口
- listview - 通过 TListView 实现 Windows 缩略图
- mysql - 不确定如何为以下任务构建 SQL 查询
- typescript - 元素隐式具有“任何”类型,因为类型“设置”
' 没有索引签名 - notepad++ - 如何搭配
[越线] 使用记事本++ 7.0 版