我在R中有一个50的数字向量,我使用sample()
生成此向量的排列,但我的问题是:
可以从此向量生成的组合总数,而不重复?
并且样本是否计算排列而不重复?
我正在做的是这样的:
for (i in 1:100)
{
test$x <- sample(test$x,nrow(test), replace=FALSE)
}
是否有任何可能性,我可能会从此代码中获得x列的重复排列?
答案 0 :(得分:1)
sample(1:3)
。答案 1 :(得分:1)
n
值的唯一排列数为n!
。如果您有n = 3
个值,则排列数为3 * 2 * 1 = 6
。在R中,此数字可以使用factorial(n)
计算。
函数sample
的不同运行独立。因此,可以获得相同的排列。
如果要生成一组值的所有排列,可以使用permutations
包中的函数gregmisc
。这是一个例子:
# generate a vector of values
dat <- letters[1:3] # [1] "a" "b" "c"
# the number of values to be drawn from the vector
n_samp <- 2 # Note. The maximum number is: length(dat)
library(gregmisc)
# generate the permutations
permutations(length(dat), n_samp, v = dat)
# The result:
[,1] [,2]
[1,] "a" "b"
[2,] "a" "c"
[3,] "b" "a"
[4,] "b" "c"
[5,] "c" "a"
[6,] "c" "b"
答案 2 :(得分:0)
由于@djurhio提到你的例子中的排列数为50! (即大约3e64)太大了,你无法找到所有这些。但是,对于较小的样本,您可以使用包allPerms
中的函数permute
。
test<-data.frame(x=round(rnorm(5),2)
test
x
1 0.33
2 0.34
3 2.18
4 0.92
5 -0.29
library(permute)
t(apply(allPerms(test$x),1,function(X)test$x[X]))
[,1] [,2] [,3] [,4] [,5]
[1,] 0.33 0.34 2.18 -0.29 0.92
[2,] 0.33 0.34 0.92 2.18 -0.29
...
[118,] -0.29 0.92 2.18 0.33 0.34
[119,] -0.29 0.92 2.18 0.34 0.33