将每个元素拆分为包含R中不同大小的128个元素的列表

时间:2015-12-21 14:23:37

标签: r

我有一个数据框,其中包含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个不同大小的不同数据帧(子集)。我希望他们分开。

对于拆分此列表,您有任何建议或不同的想法吗?

1 个答案:

答案 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])