2016-04-05 20 views
2

Gruplandırılmış elemanların bir listesi var ve bu elemanların tüm olası kombinasyonlarını yapmak istiyorum, ancak her gruptan sadece bir öğe almak istiyorum. Sipariş önemli değil. Gruplandırılmış elemanlardan oluşan kombinasyonlar

vars_list <- list(Group1 = letters[1:5], Group2 = letters[6:9], 
        Group3 = letters[10:11], Group4 = letters[12:15]) 

ı n = 2 için kombinasyonlar yapmak istediğimizi varsayalım

, n = 3, n = n kullanmak istediğim gruplarının sayısı 4.

bunu yapmak için bir çözüm bulunca n = gruplar ( Combinations from recursive lists) sayısı:

lengths <- c(1, 1, 1, 1) 
combos <- expand.grid(mapply(function(element, n) combn(element, m=n, 
FUN=paste0, collapse=""), vars_list, lengths, SIMPLIFY = F)) 

nasıl grupların n < sayısı için yapar?

Sen n = 1 için grupların bütün kombinasyonlarını almak için combn kullanabilirsiniz
+0

Eğer n = 2 ise hangi elemanlar alınacak? Group1' ve Group3', Group2' ve Group3' vb? – adaien

+0

"Kombinasyonlarınızın" "expand.grid (vars_list)" ile aynı olduğunu unutmayın, tümünü kontrol edin (combos == expand.grid (vars_list)) – user1981275

+0

adiana, n = 2 iki öğenin alınması gerektiği anlamına gelir iki ayrı grup örn. Group1'den 'a' ve Group2'den 'f'. user1981275, öyle! cevabın işi yapıyor gibi görünüyor. çok teşekkürler. – Xlrv

cevap

1

, n = 2, n = 3 ve n = 4 ve daha sonra kullanmak expand_grid:

n = 2 
apply(combn(1:length(vars_list), n), 2, function(x){expand.grid(vars_list[x])}) 

böylece n = 4, sen senin sorunundakiyle aynı olur. Demek istediğin bu mu?

+0

veya bir seferde tüm "n" için bir liste istiyorsanız, bunu başka bir "lapply": lapply (1: 4, function (n) {apply (combn (1: length (vars_list)), n), 2, function (x) {expand.grid (vars_list [x])})}) ' ' – user1981275