我有一个包含五个项目的向量。
my_vec <- c("a","b","a","c","d")
如果我想将这些值重新排列到一个新的向量中(随机播放),我可以使用sample():
shuffled_vec <- sample(my_vec)
简单 - 但sample()函数只给我一种可能的洗牌。如果我想知道怎么办all可能的洗牌组合?各种“combn”函数似乎没有帮助,expand.grid() 给了我所有可能的组合with当我需要时更换without替代品。做到这一点最有效的方法是什么?
请注意,在我的向量中,我有两次值“a” - 因此,在返回的洗牌向量集中,它们都应该在集合中都有两次“a”。
I think 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),]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)