2016-03-06 130 views
1

我有以下的数据帧称为groceriesR:如何按组分组数据框?

Region Item Barcode Version 
East  Cereal BM  2.1 
North Bagel  EP  2.0 
East  Pizza  BM  2.3 
West  Taco  EP  2.2 
West  Apple  BM  3.0 
South Orange EP  3.2 
North Tomato EP  2.2 
South Grape  EP  2.0 
East  Pineapple EP  3.2 
North Cake  BM  2.0 

如何子组条形码,版本数据帧得到以下数据帧?

数据帧

Region Item Barcode Version 
East  Cereal BM  2.1 
East  Pizza  BM  2.3 
North Cake  BM  2.0 

数据帧

Region Item Barcode Version 
West  Apple  BM  3.0 

数据帧

Region Item Barcode Version 
North Bagel  EP  2.0 
North Tomato EP  2.2 
South Grape  EP  2.0 
West  Taco  EP  2.2 

数据帧

Region Item Barcode Version 
South Orange EP  3.2 
East  Pineapple EP  3.2 

正如你所看到的,我试图通过条码和版本来对原始数据框进行子集化(作为整数;所以2.0,2.1,2.3都被认为是2等)。

这是我到目前为止有:

subset(groceries, Barcode=="BM" & Version==2.0 | Version==2.1 | Version==2.3) 

正如你能想象这是不理想的。有没有一种方法可以得到BarcodeVersion(作为整数)的不同因子的矢量?如果我可以将这两个作为一个向量,那么我可以创建一个for循环来自动执行上面这行代码来创建这4个数据帧。

回答

2
split(df, interaction(df$Barcode, floor(df$Version))) 
# $BM.2 
# Region Item Barcode Version 
# 1 East Cereal  BM  2.1 
# 3 East Pizza  BM  2.3 
# 10 North Cake  BM  2.0 
# 
# $EP.2 
# Region Item Barcode Version 
# 2 North Bagel  EP  2.0 
# 4 West Taco  EP  2.2 
# 7 North Tomato  EP  2.2 
# 8 South Grape  EP  2.0 
# 
# $BM.3 
# Region Item Barcode Version 
# 5 West Apple  BM  3 
# 
# $EP.3 
# Region  Item Barcode Version 
# 6 South Orange  EP  3.2 
# 9 East Pineapple  EP  3.2 
+0

谢谢!这正是我所期待的。如何将不同的数据框自动分配到单独的变量中?真实的数据有很多这样的内部子集。我怎么把它们拉出来而不必做:'例如,split(df,interaction(df $条形码,floor(df $版本)))$ EP.3'? – cooldood3490

+1

@ cooldood3490,这样做不是一个好主意,尤其是有很多子集;使用列表更实用。您希望如何调用这些数据框?也许运行'aux < - interaction(df $ Barcode,floor(df $ Version)); ml < - split(df,aux)'然后使用ml [[aux [1]]]','ml [[aux [2]]]也很好吗?或者当然是ml [[1]],'ml [[2]]'。 – Julius