2012-08-15 33 views
1

假設我有一個包含7個變量的數據框。我想根據一列的內容自動對數據框進行子集分類。該列是Department,有17個不同的值。我希望R查看「Dept」列,併爲包含所有其他行的每個Dept創建一個新的數據框。這與Minitab中的「拆分工作表」相當。現在,我必須運行子集命令17次爲每個創建一個數據幀。 R可以根據列內容自動執行此操作嗎?字符串子集數據框

非常感謝!

+1

有一個樣本? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Thell 2012-08-15 20:14:29

+0

是的,這將做的伎倆,但它輸出到控制檯,而不是放置在其每個部門的數據自己的數據框(最好由部門命名) – 2012-08-15 20:20:24

+1

它列出了可以像你一樣分配的'data.frames'。 R幾乎從不改變你下面的數據,而是操縱它並返回它。默認返回值是stdout,但您可以使用'<或'=來分配一個新變量。 – Justin 2012-08-15 20:22:45

回答

5
out<-split(df,df$Dept) 

out[[1]] 

#等訪問dataframes

out$Dept1 

給一個具體的例子

df<-data.frame(Dept=c('a','a','b','b','c','d','d'),acs=c(111,112,222,223,333,444,445)) 
out<-split(df,df$Dept) 
out 
> out 
$a 
    Dept acs 
1 a 111 
2 a 112 

$b 
    Dept acs 
3 b 222 
4 b 223 

$c 
    Dept acs 
5 c 333 

$d 
    Dept acs 
6 d 444 
7 d 445 

dept.names<-names(out) 

> dept.names[1] 
[1] "a" 

> out[[dept.names[1]]] # dataframe for department 1 
    Dept acs 
1 a 111 
2 a 112 

> out[[dept.names[2]]] # dataframe for department 2 
    Dept acs 
3 b 222 
4 b 223 


> is.data.frame(out[[dept.names[2]]]) 
[1] TRUE