2015-07-25 13 views
5

Bu nedenle, kanser sahne verileriyle çalışıyorum. Bu tür bir veri kümesi varsayalım. Onun bir veri çerçevesi.R Bir liste için Faktörlerin tüm birleşimlerini, birleştirme birleşimlerini oluşturun ve birleştirin

cancertype  stage 
TCGA-67-6215-01  1 
TCGA-67-6216-01  1 
TCGA-67-6217-01  2 
TCGA-69-7760-01  2 
TCGA-69-7761-01  1 
TCGA-69-7763-01  1 
TCGA-69-7764-01  1 
TCGA-69-7765-01  4 
TCGA-69-7980-01  1 
TCGA-71-6725-01  1 
TCGA-73-4658-01  1 
TCGA-73-4659-01  3 
TCGA-73-4662-01  1 
TCGA-73-4675-01  3 

Ne istediğim, her öğenin bir veri çerçevesi olduğu bir listedir. Burada 4 olası kanser aşaması için 4 seviye vardır. Verilerdeki # seviyesine kadar 2 seviyeden oluşan 3 seviyeden oluşan her bir kombo için veri çerçevesi olmalıdır. Ama aynı zamanda birleştirilmiş seviyelerin her kombinasyonu için bir veri çerçevesi. Demek istediğim, şu an 1.2.4 derken, bunların hepsi bir seviyeye birleştirildiğini kastediyorum.

Temel olarak bir t-testinin olası her karşılaştırmasını yapmaya çalışıyorum, bu yüzden bu karşılaştırma için ihtiyacım olan örnekleri hazırlıyorum. Sadece her olası combo ve birleştirme combo yapmak güzel olurdu.

Şimdiye kadar bulunduğum, 11 karşılaştırmalı karşılaştırmaların tüm unsurlarını birleştirebiliyorum. yani 2 aşamalarında, 3 aşamadan 4 tarak, 4 aşamadan

stage # dataframe of stage data as factors 
stage_split <-split(stage,stage[,1]) 
allcombos<- c(combn(stage_split,2,simplify=F), combn(stage_split,3,simplify=F), combn(stage_split,4,simplify=F)) 
allcombos_cmbnd<- lapply(allcombos, function(x) Reduce(rbind,x)) 

1 combo 6 tarak nasıl tüm olası birleştirme permütasyon ek dataframes oluşturmak yapmak ve sonra da bu listeye eklenecek mi? Belki de ilk veri tabanından bunu başarmak için zarif bir yol vardır. Bir yol 11'in bu listesinden geçmek ve 3'lü kombolardan başlayarak birleşmek mi? Zorla girebilirim ama bunu yapabilmem için bunu yapmanın zarif bir yolu olduğunu umuyorum. Şimdiye kadar bulduğum hiçbir şey, verilerinizdeki düzeylerin tüm kombinasyonlarını ve seviyenizin tüm birleşimlerini nasıl oluşturacağınızı açıklar. Birlikte aşamaları gruplandırma zaman, büyüklük 3. veya 4. setleri bölünmesine olan herhangi bir yardım

+1

kullanımı 'expand.grid'. – user227710

+0

Bize bazı kombinasyonların bir örneğini gösterebilir misiniz? @ user227710'un yorumu, örneğin 'expand.grid' (liste (1: 3,1: 4)) ' –

cevap

2

için

teşekkürler paket, setparts ile bölümleme set uygular partitions yoktur. Bu birleştirme bölümüne odaklanıyorum çünkü birleştirilmiş gruplandırmayı zaten anladığınıza benziyor.

## For unmerged, get groupings with something like this 
combos <- unlist(lapply(2:4, function(x) combn(unique(dat$stage), x, simplify=F)), rec=F) 

## For merged groupings, use set partitioning 
library(partitions) 
dats <- unlist(sapply(3:4, function(p) { 
    parts <- setparts(p) # set partitions of size p 
    lst <- lapply(split(parts, col(parts)), function(idx) { 
     if (p==3) {  # with sets of 3, need to exclude one of the stages 
      subLst <- lapply(1:4, function(exclude) { 
       tmp <- dat$stage 
       tmp[dat$stage==exclude] <- NA 
       ids <- seq(4)[-exclude] 
       for (i in 1:3) tmp[dat$stage==ids[i]] <- idx[i] 
       data.frame(dat$cancertype, stage=tmp) 
      }) 
      names(subLst) <- paste(1:4) 
      subLst 
     } else {   # sets of 4, no need to exclude 
      tmp <- dat$stage 
      for (i in 1:length(idx)) tmp[dat$stage==i] <- idx[i] 
      data.frame(dat$cancertype, stage=tmp) 
     } 
    }) 
    names(lst) <- lapply(split(parts, col(parts)), paste, collapse=".") 
    lst 
}), rec=F) 

dats şimdi set bölümleri göre gruplandırılmış stage s data.frames listesidir. Boyut 3 kümeleri bölümlendirilirken, aşamalardan biri kaldırılmak zorundaydı. Bu nedenle, dats'daki bu girdiler, uzunluk dört olarak listelenir; her öğe, bir aşamayı dikkate alınmadan kaldırmaya karşılık gelir (listeler sıralanır, böylece ilk bileşen, aşama 1'i kaldırır, ikinci aşama 2'yi kaldırır, vb.). Bir veya boyut 3 bölümleri de

dats[4] 
$`2.1.1` 
# $`2.1.1`$`1` 
#  dat.cancertype stage 
# 1 TCGA-67-6215-01 NA 
# 2 TCGA-67-6216-01 NA 
# 3 TCGA-67-6217-01  2 
# 4 TCGA-69-7760-01  2 
# 5 TCGA-69-7761-01 NA 
# 6 TCGA-69-7763-01 NA 
# 7 TCGA-69-7764-01 NA 
# 8 TCGA-69-7765-01  1 
# 9 TCGA-69-7980-01 NA 
# 10 TCGA-71-6725-01 NA 
# 11 TCGA-73-4658-01 NA 
# 12 TCGA-73-4659-01  1 
# 13 TCGA-73-4662-01 NA 
# 14 TCGA-73-4675-01  1 
# 
# $`2.1.1`$`2` 
#  dat.cancertype stage 
# 1 TCGA-67-6215-01  2 
# 2 TCGA-67-6216-01  2 
# 3 TCGA-67-6217-01 NA 
# 4 TCGA-69-7760-01 NA 
# 5 TCGA-69-7761-01  2 
# 6 TCGA-69-7763-01  2 
# 7 TCGA-69-7764-01  2 
# 8 TCGA-69-7765-01  1 
# 9 TCGA-69-7980-01  2 
# 10 TCGA-71-6725-01  2 
# 11 TCGA-73-4658-01  2 
# 12 TCGA-73-4659-01  1 
# 13 TCGA-73-4662-01  2 
# 14 TCGA-73-4675-01  1 

bakalım adlandırma kuralı burada group1.group2.group3$excludedGroup ve aynı numaralar grupları birleştirildi anlamına gelir. Yani, 2.1.1$1, ilk grubun hariç tutulduğu anlamına gelir ($1, aslında sadece NA'a dönüştürülür) ve kalan verilerde, grup 2 ve 3 birleştirilmiştir. Biraz kafa karıştırıcı ve daha iyi bir adlandırma şeması muhtemelen ihtiyaç duyuyor. Örnek olarak, $2.1.1$1 "aşama 1 hariç tutulmuştur (NA) ve aşama 3 ve aşama 4 birleştirilmiştir" anlamına gelir. Yani, bu verilere dats[['2.1.1']][['1']] ile erişebiliyordum. Bu listede gösterilmeyen iki tane daha data.frames vardır (3. ve 4. aşamalar hariç).

Artık, set-4 bölümleri daha basittir çünkü dışlama olmadığından.Örneğin,

dats[19] 
# $`2.3.1.1` 
#  dat.cancertype stage 
# 1 TCGA-67-6215-01  2 
# 2 TCGA-67-6216-01  2 
# 3 TCGA-67-6217-01  3 
# 4 TCGA-69-7760-01  3 
# 5 TCGA-69-7761-01  2 
# 6 TCGA-69-7763-01  2 
# 7 TCGA-69-7764-01  2 
# 8 TCGA-69-7765-01  1 
# 9 TCGA-69-7980-01  2 
# 10 TCGA-71-6725-01  2 
# 11 TCGA-73-4658-01  2 
# 12 TCGA-73-4659-01  1 
# 13 TCGA-73-4662-01  2 
# 14 TCGA-73-4675-01  1 

adlandırma burada "Group1.Group2.Group3.Group4" dir. Bu gruplama aşamasında 3 ve 4, örneğin birleştirilmiştir (her ikisi de = 1).

Eğer bölümleme setleri veya boyut 4. ve her data.frame birden karşılaştırmalar yapmanın dışlama veya bölümleme setleri ile büyüklüğü 3 ile gidebiliriz Burada da işten vardır. Örneğin, yukarıda gösterilen veri kümelerinin eşdeğer testleri, dats[['2.3.1.1']] veya her ikisi de dats[['2.1.1']][['1']] ve dats[['2.1.1']][['2']] birleştirilerek yapılabilir.

liste yerine sadece endekslerini saklamak, ya da sadece döngü içinde Hesaplamalarınızı yapabileceği tüm bu data.frame s depolamak şeyler basitleştirmek için.

+0

Çok teşekkürler! Ne kadar çabuk geldin inanılmaz. Her boyutta verimli bir şekilde genelleştirmek için ilginç bir soru. Setin ve her alt kümenin zili toplamı gibi görünüyor. Buna daha zarif bir yol olmalı diye düşünüyorum. Ne olduğunu bilmiyorum! – SuperCal123

İlgili konular