在R中生成所有可能的组合

时间:2015-04-21 01:21:20

标签: r

我有一个包含1000个观察值和1个虚拟变量的数据框(值为0或1)。

example = as.data.frame(rep(1, 1000))
names(example) = "Dummy"
head(example)
  Dummy
1     1
2     1
3     1
4     1
5     1
6     1

我想为“Dummy”变量生成所有可能的组合,以便数据框可能如下所示:

      Dummy.1  Dummy.2  Dummy.3   ... Dummy.2^1000
    1       1        1        1   ...            0
    2       1        1        1   ...            0
    3       1        1        1   ...            0
    4       1        1        1   ...            0
    5       1        1        0   ...            0
    6       1        0        0   ...            0
    .       .        .        .   ...            .
    .       .        .        .   ...            .
    .       .        .        .   ...            .
    1000    1        0        1   ...            0

请记住,我有1000个观察值,每个观察值可以取0或1的值,所以我应该有2 ^ 1000列。

1 个答案:

答案 0 :(得分:0)

这是一种脚本化的方法,用于6次观察,产生一个data_frame,其中包含2 ^ 6 = 64列,覆盖所有0和1位的排列。此方法可以扩展到可用内存的限制。

首先创建向量并将data.frame添加为列:

p = as.vector(apply(expand.grid(0:1,0:1,0:1,0:1,0:1,0:1), 1, paste0, collapse=""))
v1 <- as.numeric(substring(p[1], seq(1,nchar(p[1]),1),   seq(1,nchar(p[1]),1)))
df <- cbind(v1) # this gets the data.frame started right
for (i in 2:length(p)) {
  df <- cbind(df,as.numeric(substring(p[i], seq(1,nchar(p[i]),1), seq(1,nchar(p[i]),1))))
      # assign proper colnames later
}

最后创建data.frame的列名并插入它们:

cn = c()
for (i in 1:64) {
  n <- paste0("v",i)
  cn <- c(cn,n)
}
colnames(df) <- cn

几乎所有东西都是参数化的 - 除了为1000次观察做到这一点,将第二步中的64改为1000,在第一步中最简单的是扩展0:1的系列,...通过剪切和粘贴它长度为10,然后10次10​​次,结果100次10次。

1000次观测需要1.07150860718626732094842504906e + 301列1000行1.07150860718626732094842504906e + 304个单元格,每个4-8个字节,低端为4.28603442874506928379370019624e + 280个字节。