在包含128个元素的列表中拆分每个元素,这些元素在R中具有不同的大小
我有一个数据框架,它有7个变量,每个变量有500个观察值。 我使用powerset函数获得了这个数据集的所有子集。现在,我有一个128个子集的列表,每个都有不同的大小。我的意思是,我有128个不同的数据集。 如何从列表中拆分这128个子集? 这是我到目前为止所拥有的在包含128个元素的列表中拆分每个元素,这些元素在R中具有不同的大小,r,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=
#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])
}
}
数据生成部分
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);
我将忽略平凡(null)子集,并认为你需要其他127个组合。
# 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])
#这是您的数据
sdata请描述预期结果。预期结果是获得128个不同大小的不同数据帧(子集)。我希望它们是分开的。不清楚您的示例中如何获得128个不同的数据帧。非常感谢@duran!这正是我所寻求的。还有一个小细节。当我运行代码时,我看不到前7个子集的变量名(这是我的原始数据)。除这7个变量外,所有其他子集都包含变量名。你有什么解决办法吗?编辑。现在保存变量名。
l <- lapply(sComb, function(i){ x <- matrix(sdata[,i], nrow(sdata)); colnames(x) <- colnames(sdata)[i]; x })