R中n个bernoulli随机变量的置换

时间:2018-05-04 17:40:34

标签: r permutation

我有一组n个变量,每个变量的值都可以取0或1.我想用R来获得一个矩阵(或者数据帧等并不重要),它包含所有可能的n值的排列。例如,如果n = 3,则可能的值为:

 111
 110
 101
 100
 010
 011
 001
 000

我怎么能在R?中做到这一点?

2 个答案:

答案 0 :(得分:4)

您可以使用expand.grid来执行此操作。

expand.grid(0:1,0:1,0:1)

<强>输出

   #   Var1 Var2 Var3
   # 1    0    0    0
   # 2    1    0    0
   # 3    0    1    0
   # 4    1    1    0
   # 5    0    0    1
   # 6    1    0    1
   # 7    0    1    1
   # 8    1    1    1

如果您想将其粘贴为一个项目,则可以选择:

do.call("paste0", expand.grid(0:1,0:1,0:1))

会导致:

[1] "000" "100" "010" "110" "001" "101" "011"
[8] "111"

同样根据@Jilber Urbina的建议,可以使用expand.grid(1:0,1:0,1:0)[3:1]作为不同的订单

概括解决方案:

也可以这样做:expand.grid(rep(list(0:1), 3)),这里3是不重复,所以有人可以根据需要将其改为20或100。

替代方法:

gtools::permutations(n=2,r=3, v=0:1, repeats.allowed = T)

答案 1 :(得分:1)

使用tidyversecrossing/unite也很有用

library(tidyverse)
crossing(v1=0:1, v2=0:1, v3= 0:1) %>% 
              unite(v, names(.), sep="")