我有一个数据框,其中包含7个变量,每个变量有500个观察值。 我通过使用powerset函数获得了此数据集的所有子集。现在,我有一个128个子集的列表,每个子集都有不同的大小。我的意思是,我有128个不同的数据集。 如何从列表中拆分这128个子集? 这是我到目前为止所拥有的;
#data generation part
x1=rnorm(n=500, m=2, sd=1);
x2=rbinom(n=500, 1 , 0.6);
y=rbinom(n=500, 1 , 0.7);
r1=rbinom(n=500, 1 , 0.65);
x1x1=x1*x1;
x1x2=x1*x2;
x1y=x1*y;
x2y=x2*y;
s=rbind(x1,x2,y,x1x1,x1x2,x1y,x2y);
sdata<-data.frame(t(s));
#getting subsets of 7 variables as a list
len = length(sdata)
l = vector(mode="list",length=2^len) ; l[[1]]=numeric()
counter = 1L
for(x in 1L:length(sdata)){
for(subset in 1L:counter){
counter=counter+1L
id=rep(l[[counter]], nrow(l[[counter]]))
l[[counter]] = data.frame(l[[subset]],sdata[x])
}
}
所以,&#34; l
&#34;是一个包含128个元素的列表。每个元素都是不同大小的矩阵。我希望他们都分开了。我试图添加&#34; id&#34;每个元素的向量,但我无法做到。如果我可以为每个元素添加id向量,我可以使用id分割它们。
预期结果是获得128个不同大小的不同数据帧(子集)。我希望他们分开。
对于拆分此列表,您有任何建议或不同的想法吗?
答案 0 :(得分:0)
我将忽略普通(null)子集,并考虑您想要其他127种组合。
replace(/^0|[^0-9]/, '');
希望这有帮助
修改强>
如果您想保存名称(以及列表中的每个元素作为矩阵),请将最后一行更改为此
# This is your data
sdata <- matrix(1:(500*7), 500, 7)
# We generate all the possible combinations (127 cases)
sComb <- do.call(list, unlist(lapply(1:7, function(n) combn(1:7, n, simplify = F)), r = F))
# And then we create all the possible datasets
l <- lapply(sComb, function(i) sdata[,i])