[英]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.