ozj*_*bob 3 r shuffle sampling
我有一个包含五个项目的向量。
my_vec <- c("a","b","a","c","d")
Run Code Online (Sandbox Code Playgroud)
如果我想将这些值重新排列成一个新的向量(shuffle),我可以使用 sample():
shuffled_vec <- sample(my_vec)
Run Code Online (Sandbox Code Playgroud)
简单 - 但 sample() 函数只给了我一种可能的洗牌。如果我想知道所有可能的洗牌组合怎么办?各种“combn”的功能似乎并没有帮助,expand.grid()给我的每一个可能的组合都与更换,当我需要它无需更换。执行此操作的最有效方法是什么?
请注意,在我的向量中,我有两次值“a”——因此,在返回的一组混洗向量中,它们都应该在集合中都有两次“a”。
我认为permn从组合包做你想要的
library(combinat)
permn(my_vec)
Run Code Online (Sandbox Code Playgroud)
一个较小的例子
> 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"
Run Code Online (Sandbox Code Playgroud)
如果重复是一个问题,你可以做类似的事情来摆脱重复
strsplit(unique(sapply(permn(my_vec), paste, collapse = ",")), ",")
Run Code Online (Sandbox Code Playgroud)
或者可能是删除重复项的更好方法......
dat <- do.call(rbind, permn(my_vec))
dat[duplicated(dat),]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3772 次 |
| 最近记录: |