2013-07-28 20 views
6

Czy istnieje sposób na podzielenie wszystkich poziomów pojedynczego czynnika jednym czystym cięciem?Podzbiór wszystkich poziomów pojedynczego czynnika

Przypadek: Zakładając, że masz ramkę danych, w której jedna z kolumn jest czynnikiem (współczynnik $ danych) i chcesz utworzyć podzestaw danych, które zawierają tylko jeden poziom czynnika. Jest to łatwe do zrobienia, gdy istnieje niewielka liczba czynników, pisząc osobne polecenia podzestawu. Co jednak zrobić, jeśli masz dużą liczbę poziomów (na przykład 50 poziomów)? Czy istnieje polecenie lub sprytny sposób tworzenia wszystkich podzbiorów w takim przypadku bez konieczności pisania 50 lub więcej poleceń podzestawu?

+1

Tak, zobacz Split?. –

+0

@HongOoi Właśnie wypróbował to - to wygląda na lewę. Jednak grupy/podzbiory wszystkie przechodzą do jednej zmiennej (na przykład podzbiory <-split (df, czynnik danych $, drop = FALSE) .Jak uzyskuje się dostęp do każdego z podzbiorów w pojedynczej zmiennej "podzbiory"? – whistler

+0

@HongOoi Nieważne! Wyobraź to sobie Dziękuję za pomoc! W przypadku, gdy ktoś jest zainteresowany, grupy mogą być dostępne z podzbiorów, np. Grupa1 <-subsets [[1]], grupa2 <-subsets [[2]], itp. – whistler

Odpowiedz

12

bez konieczności tworzenia pętli, funkcja SPLIT jest kluczem do rozwiązania tego problemu.

Zakładając kolumnę czynnik, który chcesz podzbioru (lub podgrupy) jest w kolumnie „czynnik” w ramce danych „dane” zrobić:

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

To stworzy listę podzbiorów w oparciu o czynnik wartość. Lista będzie miała taką samą długość jak liczba czynników.

Jeśli chcesz umieścić każdy podzbiór w osobnej ramce danych, można uzyskać do nich dostęp w następujący sposób:

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

Można utworzyć pętlę nad żądanych wartości współczynnika następująco:

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) { 
     ... 
    } 
} 
Powiązane problemy