2013-07-28 14 views
6

Tek bir faktörün tüm seviyelerini tek bir temizleme çubuğunun alt kümesine ayırmanın bir yolu var mı?Tek bir faktörün tüm seviyelerini alt üst edin

Durum: Sütunlardan birinin bir faktör olduğu (veri $ faktörü) bir veri çerçeveniz olduğunu ve yalnızca bir faktör düzeyini içeren alt küme veri çerçevelerini oluşturmak istediğinizi varsayalım. Ayrı altküme komutları yazarak az sayıda faktör olduğunda bunu yapmak kolaydır. Ancak, çok sayıda seviyeniz varsa (ör. 50+ seviye)? 50+ alt küme komut yazmak zorunda kalmadan böyle bir durumda tüm alt kümeleri oluşturmak için bir komut veya akıllı bir yolu var mı? aşağıdaki gibi

+1

Evet, bakınız bölünmüş?. –

+0

@HongOoi Sadece denedim - bu hile yapmak gibi görünüyor. Bununla birlikte, gruplar/alt kümelerin hepsi bir değişkene gider (örneğin, alt kümeler <-split (df, data $ factor, drop = FALSE). Bir altkümenin her birine "altkümeler" tekli değişkenine nasıl erişilir? – whistler

+0

@HongOoi Nevermind! Bunu çözdünüz.Yardımınız için teşekkürler! Herkes ilgilendiğinde, gruplara alt kümelerden erişilebilir, örneğin grup1 <-subets [[1]], grup2 <-subets [[2]], vs. – whistler

cevap

12

bir döngü oluşturmak zorunda olmadan, SPLIT işlevi bu sorunu çözme anahtarıdır. Eğer alt küme (veya alt grup) istediğiniz faktör sütunu varsayarsak

"veri" veri çerçevesinin sütun "faktörü" olduğunu yapın:

subsets<-split(data, data$factor, drop=TRUE) 

Bu faktör dayalı alt kümelerinin bir listesini oluşturur değer. Liste, faktör sayısıyla aynı uzunlukta olacaktır. Eğer ayrı bir veri çerçevesi içinde her alt kümesini koymak gerekirse

, aşağıdakileri yaparak erişebilirsiniz:

group1<-subsets[[1]] 
group2<-subsets[[2]] 
... 
0

İstenen faktör değerlerinin üzerinde bir döngü oluşturabilirsiniz:

vals <- sort (unique (data[[factor]])) 
for (i in 1:length(vals)) { 
    subset <- (data[[factor]]==vals[i]) 
    n <- length (data[[factor]][(subset)]) 
    if (n >= min.n) { 
     ... 
    } 
} 
İlgili konular