我有一个包含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列。
答案 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个字节。