【问题标题】:how to randomly distribute numbers among the elements of a vector? in R如何在向量的元素之间随机分配数字?在 R 中
【发布时间】:2013-03-22 02:05:42
【问题描述】:

这是我的问题。

假设我有一个向量:

vec <- c("a","b","c","d","e","f")

我想在我的向量的元素中随机分配 6 个值,有时一个元素得到一些东西(在 1 和 6 之间),有时什么也得不到,但值的总和必须总和为 6 . 所以在一个例子中,这些值会像这样分布:

3,0,1,0,2,0

在另一个这样的:

1,0,1,1,2,1

等等。

在 R 中有没有简单的方法来做到这一点?

非常感谢您。

蒂娜。

【问题讨论】:

  • 您在寻找可替换的样品吗?

标签: r random vector


【解决方案1】:

编辑:

这样更好,因为它几乎肯定会产生具有您期望的相对频率的各种分区:

as.vector(rmultinom(1, size=length(vec), prob=rep(1, length(vec))))
# [1] 4 0 1 0 1 0

您在此处搜索的组合对象称为"partition"partitions 包包含许多用于生成不同风格的分区的漂亮函数。稍微调整一下parts() 函数的输出,我们就能得到您想要的结果。

library(partitions)

## Create a function
randPartition <- function(vec) {
    pp <- parts(length(vec))
    sample(pp[,sample(ncol(pp), 1)])
}

## Try it out a few times
randPartition(vec)
# [1] 1 1 1 1 1 1
randPartition(vec)
# [1] 2 0 0 2 0 2
randPartition(vec)
# [1] 0 0 0 0 0 6

【讨论】:

  • 不过,您可能需要多考虑一下,这种方法是否会以您想要的相对频率生成各种分区...
  • 我也喜欢@flodel 的回答(因为里卡多的删除回答迷路了):table(factor(sample(vec, 6, replace = TRUE), levels = vec))
猜你喜欢
  • 2018-04-28
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 2011-08-05
相关资源
最近更新 更多