2015-12-21 41 views
0

我有一個數據框,它有7個變量,每個變量有500個觀察值。 我通過使用powerset函數獲取了此數據集的所有子集。現在,我有一個128個子集的列表,每個子集都有不同的大小。我的意思是,我有128個不同的數據集。 如何從列表中分離這128個子集? 這是我到目前爲止;將R中的每個元素分解成128個不同大小的元素R

#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]) 
    } 
} 

所以, 「l」 是一個列表包含128個元素。每個元素都是不同大小的矩陣。我希望他們都分裂。我試圖爲每個元素添加「id」矢量,但我無法做到。如果我可以爲每個元素添加id矢量,我可以通過使用id將它們分開。

預期結果是獲得128個不同大小的不同數據幀(子集)。我希望他們分開。

你有任何建議或不同的想法分裂這個名單?

+1

請描述預期的結果。 –

+0

預期結果是獲得128個不同大小的不同數據幀(子集)。我希望他們分開。 – tedariksiz

+0

你不清楚你如何在你的例子中獲得128個不同的數據幀。 – user1945827

回答

0

我打算忽略一般的(空)子集,並考慮你想要其他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]) 

希望這有助於

編輯:

如果你想節省名稱(和列表作爲矩陣的每個元素)改變的最後一行到這個

l <- lapply(sComb, function(i){ x <- matrix(sdata[,i], nrow(sdata)); colnames(x) <- colnames(sdata)[i]; x }) 
+0

非常感謝你@duran!這正是我所追求的。只是一個小細節。當我運行代碼時,我看不到前7個子集的變量名(這是我的原始數據)。所有其他子集都包含除那些以外的變量名稱。您有任何解決方案嗎? – tedariksiz

+0

已修改。現在保存變量名稱。 – durum

相關問題