r - 洗牌向量 - 样本()的所有可能结果?

标签 r shuffle sampling

我有一个包含五个项目的向量。

my_vec <- c("a","b","a","c","d")

如果我想将这些值重新排列成一个新的向量(随机播放),我可以使用sample():

shuffled_vec <- sample(my_vec)

简单 - 但sample()函数只给我一种可能的洗牌。 如果我想知道所有可能的洗牌组合怎么办?各种“combn”函数似乎没有帮助,而expand.grid()给了我所有可能的组合< em>有更换,当我需要时没有更换。最有效的方法是什么?

请注意,在我的向量中,我有两次值“a” - 因此,在返回的打乱向量集中,它们都应该有两次“a”。

最佳答案

我认为组合包中的permn可以满足您的需求

library(combinat)
permn(my_vec)

一个较小的例子

> x
[1] "a" "a" "b"
> permn(x)
[[1]]
[1] "a" "a" "b"

[[2]]
[1] "a" "b" "a"

[[3]]
[1] "b" "a" "a"

[[4]]
[1] "b" "a" "a"

[[5]]
[1] "a" "b" "a"

[[6]]
[1] "a" "a" "b"

如果重复项是一个问题,您可以执行类似的操作来消除重复项

strsplit(unique(sapply(permn(my_vec), paste, collapse = ",")), ",")

或者可能是删除重复项的更好方法......

dat <- do.call(rbind, permn(my_vec))
dat[duplicated(dat),]

关于r - 洗牌向量 - 样本()的所有可能结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20342323/

相关文章:

r - knitr 中的 fig.env 有问题吗?

r - R 中的 Gamma 分布下限

java - 创建一个 Java 洗牌程序

python - 自举二项式分布

r - [.data.table (merge - X[Y]) 键在 v.1.9.3 中丢失了

R:如何将由行索引列表表示的稀疏二进制矩阵转换为列索引列表

Java 数组算法,将 shuffle 类型从 "in-shuffle"交换到 "out-shuffle"时出错

python - 如何在生成器上使用 random.shuffle()? Python

postgresql - 在 PostgreSQL 中采样

r - 使用单个采样命令在数据框中创建多行