繁体   English   中英

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

[英]Generate all possible combinations in 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.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列。

这是一种脚本化的方法,可用于6个观测值,从而得到一个data.frame,其中有2 ^ 6 = 64列,涵盖了零和1的所有排列(对于6位)。 该方法可以扩展到可用内存的限制。

首先创建向量并将其添加到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.071508607186267267948948504504906e + 301列乘1000行以1.07150860718626732094842504906ee + 304信元(每个4-8字节),在低端为4.28603442874506928379370019624e + 280 yobytes。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM