2012-08-15 29 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