2013-07-28 40 views
6

是否有一種方法可以將一個因子的所有級別進行子集劃分?子集單個因子的所有級別

案例:假設您有一個數據框,其中一列是一個因子(數據$因子),並且您想創建只包含一個因子水平的子數據框。通過編寫單獨的子集命令來實現少量因素時,這很容易實現。但是,如果你有很多級別(例如50+級別)呢?有沒有一種命令或一種聰明的方式來創建這種情況下的所有子集而無需編寫50個子集命令?

+1

是的,看到分裂? –

+0

@HongOoi剛剛嘗試過 - 這看起來很詭異。然而,這些組/子集全部進入一個變量(例如子集<-split(df,data $ factor,drop = FALSE)。如何訪問單個變量「子集」中的每個子集? – whistler

+0

@HongOoi Nevermind!想出來,感謝您的幫助!!如果有人感興趣,可以從子集中訪問這些組,例如group1 <-subsets [[1]],group2 <-subsets [[2]]等。 – whistler

回答

12

,而無需創建一個循環,分割功能是關鍵,解決這個問題。

假設你想子集(或子組)的因素列在數據幀的「數據」一欄「因素」做:

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

這將創建一個基於因子子集的列表值。該列表將具有與因子數量相同的長度。

如果你需要把每個子集在一個單獨的數據幀,您可以通過以下方式聯繫他們:

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

可以創造超過所要求的因子值的循環如下:

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) { 
     ... 
    } 
} 
相關問題