2016-03-17 27 views
2

這不是一個關於如何做本身的問題,更多的是關於如何做更好的事情。R dataframe子集整理優化

在R,說我有一個數據幀,DF:

df<-read.table(text=" 
Column1 Column2 Category  
    1  1   A 
    2  1   B  
    3  1   D  
    4  1   E  
    5  2   B  
    6  3   B  
    7  4   C 
    8  4   C  
    9  5   E  
    10  6   A", header=TRUE) 

現在我想創建一個列表(dataframes的),其中列表中的每個數據幀是DF的一個子集,其中每個子集是有條件的在類別上。我可以創建這個如下:

mylist <-list() 
mylist[[1]] <- subset(df,df$Category=='A') 
mylist[[2]] <- subset(df,df$Category=='B') 
mylist[[3]] <- subset(df,df$Category=='C') 
mylist[[4]] <- subset(df,df$Category=='D') 
mylist[[5]] <- subset(df,df$Category=='E') 

現在這個工作,但很笨重,實際上是一個硬編碼的循環,如果我有超過五類不會輕鬆擴展。

有沒有更緊密/更好的方法來做到這一點?

回答

2

可以使用功能劃分

split(df,df$Category) 
+0

這是緊張..謝謝。 – desiguel

0

您可以使用dplyr庫和循環對於這種情況:

library(dplyr) 
mylist <-list() 
for (v in unique(df$Category)){ 
    mylist[[length(mylist)+1]] <- filter(df, Category == v) 
} 
mylist 
+0

如果您正在使用'dplyr',您可能只需執行'df%>%group_by(Category)',然後將所需的任何計算應用於具有另一個'%>%'的子集。該軟件包顯式地試圖避免使用'list'對象來支持'data.frame'這樣的對象。 – thelatemail